1. TOPTOP
  2. Webサービス
  3. Twitter

Twitter APIのユーザータイムライン(GET statuses/user_timeline)をデータベースに切れ目なく保存する(その4~since_idとmax_idの組み合わせについて)

|

Twitter_logo_blue

keitaisokaiseki1

TwitterAPIのユーザータイムライン(GET statuses/user_timeline(新しいタブで開く))を、切れ目なく追加するために保存するための方法について、こぼれ話です。

前回は、「取得する件数は1件」、「crontabを5秒に1回実行する」という条件で、おおよそのツイートを追加するという方法を紹介しました。今回は、さらに確実にユーザータイムラインのツイートを追加するというやり方を紹介します。

といっても結論から言うと、このやり方は「理論的には正しいけど、実際にどうするの?」という感じなので、参考程度に紹介しておきます。

since_idとmax_idの違い

より正確に、一定期間内のつぶやきを取得するためには、arrayのパラメーターとしてsince_idmax_idを用います。

  • since_id → 指定したステータスIDより上で、最も新しいツイートを指定する
  • max_id → 指定したステータスIDを含み、それより古いツイートを指定する

別の言い方をすると、since_idはとにかく最新のツイートを基準にするけど、max_idは指定したツイートを基準にするとも言えます。

since_idとmax_idの組み合わせ

それぞれ役割は異なりますが、これらを組み合わせることで、タイムライン上のツイートを切れ目なく追加することができるようになります。

$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のコードで書くとこんな感じになります(詳しいコードはこちら(新しいタブで開く)

tw_maxid_1

最初に39のツイートから、さらに5つのツイートが新しく発生した状態を表した画像です。この中から3件のツイート(67、59、44)を取得します。

tw_maxid_2

まずsince_idで指定したステータスIDより上で、最も新しいツイートを3件指定します

tw_maxid_3

次にsince_idの中で最も古い67を指定し、それを含んだ3つのツイートを3件指定します。これでユーザータイムラインのツイートをデータベースに、切れ目なく保存することができます(画像を作成したスプレッドシートはこちら(新しいタブで開く)

問題点

この考え方は理論的には誠にその通りなのですが、難点がひとつあります。それはarrayの引数の中で、未知であるmax_idのステータスIDを指定することができないことです。

Twitterのドキュメンテーションで挙げられている例(新しいタブで開く)では、連続した番号が使われていますが、ユーザータイムラインで、実際のステータスIDが連番になることはまずありません。

何か前提を変えれば、since_idとmax_idの組み合わせで、切れ目なくユーザータイムラインを取得することができるかもしれません。ですが今のところ良い方法はみつかっておりません。

〔参考サイト〕