TwitterAPIのユーザータイムライン(GET statuses/user_timeline)を、切れ目なく追加するために保存するための方法について、こぼれ話です。
前回は、「取得する件数は1件」、「crontabを5秒に1回実行する」という条件で、おおよそのツイートを追加するという方法を紹介しました。今回は、さらに確実にユーザータイムラインのツイートを追加するというやり方を紹介します。
といっても結論から言うと、このやり方は「理論的には正しいけど、実際にどうするの?」という感じなので、参考程度に紹介しておきます。
since_idとmax_idの違い
より正確に、一定期間内のつぶやきを取得するためには、arrayのパラメーターとしてsince_idとmax_idを用います。
- since_id → 指定したステータスIDより上で、最も新しいツイートを指定する
- max_id → 指定したステータスIDを含み、それより古いツイートを指定する
別の言い方をすると、since_idはとにかく最新のツイートを基準にするけど、max_idは指定したツイートを基準にするとも言えます。
since_idとmax_idの組み合わせ
それぞれ役割は異なりますが、これらを組み合わせることで、タイムライン上のツイートを切れ目なく追加することができるようになります。
[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,
’max_id’ => $maxid,
));
[/php]
PHPのコードで書くとこんな感じになります(詳しいコードはこちら)
最初に39のツイートから、さらに5つのツイートが新しく発生した状態を表した画像です。この中から3件のツイート(67、59、44)を取得します。
まずsince_idで指定したステータスIDより上で、最も新しいツイートを3件指定します
次にsince_idの中で最も古い67を指定し、それを含んだ3つのツイートを3件指定します。これでユーザータイムラインのツイートをデータベースに、切れ目なく保存することができます(画像を作成したスプレッドシートはこちら)
問題点
この考え方は理論的には誠にその通りなのですが、難点がひとつあります。それはarrayの引数の中で、未知であるmax_idのステータスIDを指定することができないことです。
Twitterのドキュメンテーションで挙げられている例では、連続した番号が使われていますが、ユーザータイムラインで、実際のステータスIDが連番になることはまずありません。
何か前提を変えれば、since_idとmax_idの組み合わせで、切れ目なくユーザータイムラインを取得することができるかもしれません。ですが今のところ良い方法はみつかっておりません。
〔参考サイト〕