Roll Play My Life

= ryuji_026

オレオレbot制作-5 TwitterAPI???一方で自分のコードが間違っている可能性が排除できない【毎日更新その099】

前回記事でみなさまに質問した問題、先生にアドバイスいただけて(100件ずつ取得、それをループ)、なるほどそれでいけそうな気はします。

気はするんですが、納得のいかないこともあって、またそもそも「1週間程度」しかツイートは遡れないみたいな話も耳にしたりしています(公式Webの検索では例えば2年前などのかなり昔のツイートも取得できます)。

納得のいかないこと

Webブラウザ上のtwitter.comの検索窓に「from:ryuji_026 since:2013-11-10 until:2013-11-12」入力して検索した場合「@ryuji_026が11/10と11/11にポストしたツイート」を見ることができます。

一方プログラムで、例えばこのように検索したとします。

$keywords = 'from:ryuji_026 since:2013-11-10 until:2013-11-12';

$opt = array(
	"q"=>$keywords,		// keyword
	"count"=>100,			// number of tweets
	"result_type"=>"recent",	// 最新ツイートみたいな?
);

//JSON形式でタイムラインを取得
$req = $this->Request("search/tweets.json", "GET", $opt);
//PHP配列に変換
$result = json_decode($req);

if($req)				var_dump('req');
if($result)				var_dump('result');
if($result->statuses)		var_dump('statuses');

コマンドラインで実行すると、

string(3) "req"
string(6) "result"

と表示されます。

TwitterAPIのドキュメントによると、GET searchで検索できるのは最大100件まで(、それ以上はtweetのidを指定して繰り返し呼び出してください)ということです。

ツイートの数を調べてみたりしたところ、上記のプログラムでstatusesが空っぽらしき動きをしている理由は「@ryuji_026の11/10と11/11のツイートが、@ryuji_026の最新ツイートから数えて100件目を超えている」ということのようでした。

つまり検索キーワードに「until:YYYY-MM-DD since:YYYY-MM-DD」と指定した場合の検索は、実際には最新tweetから1tweetずつ遡り、指定した日付が見つかった時に値を返すみたいなことをしているようです。

これって、そういうもんなんですか?

ちなみにキーワードを日付でなく文字列にした場合(「from:ryuji_026 こんにちは」など)でも、「こんにちは」が含まれるtweetが最新100件よりも古い場合には結果を取得できません。