前ふりが長くなってすいません。過去2回の記事の続きです。
- TwitterAPIのユーザータイムライン(GET statuses/user_timeline)をデータベースに切れ目なく保存する(その1~since_idの活用)
- TwitterAPIのユーザータイムライン(GET statuses/user_timeline)をデータベースに切れ目なく保存する(その2~since_idのクセ)
今回こそ、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の内容など詳しいコードはこちら)
[php]
$request = $twObj->OAuthRequest(‘https://api.twitter.com/1.1/statuses/user_timeline.json’,’GET’,
array(
‘count’=>’1’,
‘screen_name’ => ‘echizenya_yota’,
‘since_id’ => $sinceid,
));
[/php]
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回以上ツイートするユーザータイムラインを追わなければならない場合は、別途対策を考えましょう。
〔参考サイト〕