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の内容など詳しいコードはこちら

[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回以上ツイートするユーザータイムラインを追わなければならない場合は、別途対策を考えましょう。

〔参考サイト〕

Twitter_logo_blue

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次