Twitter API v1.1で複数のキーワードを検索したツイート件数を取得する
概要
Twitter API v1.1
特定のキーワードでツイートを検索するためにSearch APIを利用します。Twitter APIを利用するためには、Twitter Developersでアプリケーション登録が必要です。登録するとAPIを利用するためのアクセスキーが発行されます。この記事ではPHPでのAPI取得方法になります。
基本:キーワードのツイート取得
1. 準備
Twitter APIを利用するために便利なライブラリをダウンロードします。GithubからTwitterOAuthをダウンロードし、お好きな場所に配置します。
そして、TwitterOAuthのファイルを読み込み、使用するための記述を行います。
require_once('twitteroauth/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;
$consumerKey = 'XXXXXXXXXXXXXXXXX';
$consumerSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$accessToken = '00000000-XXXXXXXXXXXXXXXXXXXXXXXXXXX';
$accessTokenSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$oAuth = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
2. ツイート取得&結果表示
// 検索キーワード
$search_key = 'sns';
// 取得オプション
$options = array('q'=>$search_key, 'count'=>100, 'lang'=>'ja', 'result_type' => 'recent');
// 取得
$results = $oAuth->get("search/tweets", $options);
// 取得内容表示
echo '<pre>'; var_dump($results); echo '</pre>';
取得オプションの取得件数(count)は100件が上限です。検索のタイプ(result_type)は最近に設定しています。
応用:2つのキーワードのツイート件数取得
1. 初期設定
require_once('twitteroauth/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;
$consumerKey = 'XXXXXXXXXXXXXXXXX';
$consumerSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$accessToken = '00000000-XXXXXXXXXXXXXXXXXXXXXXXXXXX';
$accessTokenSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$oAuth = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
$search_key1 = '"Twitter 好き"';
$search_key2 = '"Twitter 嫌い"';
$until_date = '2016-08-21'; //上限 7日間
$request_loop = 10; //上限 180
Search APIの取得データは1週間前までしか取得できず、アクセス回数の上限は15分間で180回になります。今回は2つのキーワードを取得するので各キーワードの上限は90回となり最大で各9000ツイートを取得することができます。
15分経過すると上限はリセットされるので時間をかければより多くのツイートを取得することが可能です。
2. ツイート取得
$tweet_results1 = tweet_loop($search_key1);
$tweet_results2 = tweet_loop($search_key2);
function tweet_loop($keyword){
global $oAuth, $until_date, $request_loop, $tweet_results;
$tweet_results = array();
$options = array('q'=>$keyword.' -RT', 'count'=>100, 'lang'=>'ja', 'result_type' => 'recent', 'until'=>$until_date);
for($i=0; $i<$request_loop; $i++){
$results = $oAuth->get("search/tweets", $options); // API取得
foreach($results->statuses as $val){
$tweet_results[]['text'] = $val->text; //とりあえず取得したツイートを配列へ
}
// これ以上に取得できるツイートがあるか条件分岐
if(isset($results->search_metadata->next_results)){
// 次ページURLのmax_id値を取得
$max_id = preg_replace('/.*?max_id=([\d]+)&.*/', '$1', $results->search_metadata->next_results);
$options['max_id'] = $max_id; // あればmax_idをoptionsに追加
}else{
break; // なければループを抜ける
}
}
return $tweet_results;
}
オプション設定は-RTを指定することによりRTを除外することができます。untilはいつまでのツイートを取得するかどうかの設定です。
取得した結果のデータにnext_resultsが存在すれば、まだ取得できるツイートが存在するということになります。max_idをオプション設定に追加することで次回の結果取得時はそれ以上のデータから取得してくれます。
3. 結果表示
echo '好き件数:'.count($tweet_results1).'<br>'; // 記事執筆時 358件
echo '嫌い件数:'.count($tweet_results2).'<br>'; // 記事執筆時 123件
echo '<pre>'; var_dump($tweet_results1); echo '</pre>';
echo '<pre>'; var_dump($tweet_results2); echo '</pre>';
どうでもいいことですが、preとvar_dumpを1行に書くことでコメントアウトが楽になります。