Twitter API search/tweets で 100件以上のツイートを取得する(PHP)

プログラム
スポンサーリンク

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.

GET search/tweets | Twitter Developers より引用

コメント

タイトルとURLをコピーしました