Twitter のツイート検索API(search/tweets)で、取得できるツイート数の上限は 100件 です。分析用途で使うには、ちょっと件数が少ないですね。そこで今回は、Twitter API で 100件 以上のツイートを取得する方法をご紹介します。
count パラメータの設定
ツイート検索API(search/tweets)での、基本的なツイート取得方法は こちら をご参照ください。
1回のリクエストで取得できるツイート数は、15件(デフォルト値)です。count パラメータに取得する件数を指定することで、最大100件のツイートを取得できます。
$params = array( 'q' => 'おはよう', 'count' => 100, );
next_results クエリストリングをパラメータに変換
ツイート検索APIからデータを取得すると search_metadata -> next_results に、次ページのツイートを取得するための、クエリストリングが入っています。
["search_metadata"]=> (略) ["next_results"]=> string(92) "?max_id=625764399702126591&q=%E3%81%8A%E3%81%AF%E3%82%88%E3%81%86&count=1&include_entities=1"
上記の next_results をパラメータ(配列)に変換し、このパラメータ($params)で リクエスト → next_results をパラメータに変換 → リクエスト・・・を繰り返せば、100件以上のツイートを取得できます。
// 先頭の「?」を除去 $next_results = preg_replace('/^\?/', '', $tweets_arr['search_metadata']['next_results']); // パラメータに変換 parse_str($next_results, $params);
1000件のツイートを取得できるサンプルコード
処理がいまいちあれですが、リクエスト回数($request_number)を増やせば、API利用上限が許す限り、さらに多くのツイートを取得できます。
<?php require_once('TwitterAppOAuth.php'); // Consumer Key (API Key) を設定 $consumer_key = '***'; // Consumer Secret (API Secret) を設定 $consumer_secret = '***'; // アプリケーション認証実行 $connection = new TwitterAppOAuth($consumer_key, $consumer_secret); // ツイート検索パラメータの設定、「q」は検索文字列、「count」は取得件数(最大100件) $params = array( 'q' => 'おはよう', 'count' => 100, ); // リクエスト回数 $request_number = 10; $tweet_texts = array(); for ($i = 0; $i < $request_number; $i++) { // ツイート検索実行 echo $params['count'] * $i + 1 . " - " . $params['count'] * ($i + 1) . " 件目取得中\n"; $tweets_obj = $connection->get('search/tweets', $params); // オブジェクトを配列に変換 $tweets_arr = json_decode($tweets_obj, true); // ツイート本文を抽出 for ($j = 0; $j < count($tweets_arr['statuses']); $j++) { $tweet_texts[] = $tweets_arr['statuses'][$j]['text']; } // 先頭の「?」を除去 $next_results = preg_replace('/^\?/', '', $tweets_arr['search_metadata']['next_results']); // next_results が無ければ処理を終了 if (!$next_results) { break; } // パラメータに変換 parse_str($next_results, $params); } // ツイートの表示 echo "\n取得件数:" . count($tweet_texts) . "\n\n"; for ($i = 0; $i < count($tweet_texts); $i++) { echo $tweet_texts[$i] . "\n----------\n"; }
終わりに
Twitter公式検索では、過去のすべてのツイートが検索可能ですが、search/tweets API では過去1週間のツイートに限られるのが、ちょっと残念なところです。(^^;)
Returns tweets created before the given date. Date should be formatted as YYYY-MM-DD. Keep in mind that the search index has a 7-day limit. In other words, no tweets will be found for a date older than one week.
コメント