1. TOPTOP
  2. Webサービス
  3. Twitter
  4. TwitterAPIのユーザータイムライン(GET statuses/user_timeline)をデータベースに切れ目なく保存する(その3~取得件数1件にして5秒ごとのcrontab)

TwitterAPIのユーザータイムライン(GET statuses/user_timeline)をデータベースに切れ目なく保存する(その3~取得件数1件にして5秒ごとのcrontab)

Twitter_logo_blue

keitaisokaiseki1

前ふりが長くなってすいません。過去2回の記事の続きです。

今回こそ、TwitterAPIのユーザータイムライン(GET statuses/user_timeline)を、切れ目なく追加するために保存するための方法を説明します。

ツイートを取得する前提条件

since_idの値をこねくりまわすのではなく、最初にツイートを取得する前提条件を、自分で決めておきます。

前提条件:
「タイムラインを表示したいアカウントは、速くても5秒に1回しかツイートしない」

5秒に1回しかツイートしないというのは、Twitterのレートリミットの値に由来しています。Twitterのドキュメンテーションにある、Rate Limits: Chartを読むとGET statuses/user_timelineは、15分間につき180回のアクセスが認められています。

言い換えると、

150 × 60 / 180 = 5

で、5秒に1回はアクセスできることになります。

引数(count)の値を1にする

従って、1回のアクセスで追加するツイートの件数は1件となります。コードで表すとこんな感じになりますね。
($sinceidの内容など詳しいコードはこちら(新しいタブで開く)

$request = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET',
	array(
		'count'=>'1',
		'screen_name' => 'echizenya_yota',
		'since_id' => $sinceid, 
	));

crontabを5秒ごとに実行する

次にPHPファイルを5秒ごとに実行するために、crontabを活用します。ただし、crontabは基本的に、最速でも1分ごとにしか動きません。

そこで、crontabの書き方を工夫します。

cd /var/www/html/add_tweet
crontab -e

* * * * * for i in `seq 0 5 59`;do (sleep ${i} ; /usr/bin/php /var/www/html/add_tweet/add.php) & done;

crontab -e の記述は、hello-world.jp.netさんと、Qiitaの記事を参考にさせてもらいました。

実務上は「5秒につき1回」で十分

もちろん、この考え方では対象のアカウントが5秒に1回以上ツイートすると、取りこぼしが発生します。

例として、NHKニュース@nhk_news(新しいタブで開く)のツイートを追加しようとすると、ところどころ取りこぼしがありました。

ですが、個人的に対象とするユーザータイムラインは、5秒に1回もつぶやている感じもしないので、これで良しとしています。

もし、5秒に1回以上ツイートするユーザータイムラインを追わなければならない場合は、別途対策を考えましょう。

〔参考サイト〕