TwitterAPIのバージョンは1.0から1.1に変更になっていたことを忘れていました。TwitterAPI1.0は2013.4.12段階では動いていましたが、いつ停止してもおかしくない状況です。
ツイート検索結果をリスト表示しているサービスがあったので、コードをTwitterAPI1.1で書き直しました。言語はPHPです。
コード
こんな感じのコードを書きました。
$keyword、$consumerKey、$consumerSecret、$accessToken、$accessTokenSecretの設定が必要です。
[php]
require_once ‘twitteroauth/twitteroauth.php’;
require_once ‘Cache/Lite.php’;
//config
$keyword = "";//検索キーワード
$consumerKey = "";
$consumerSecret = "";
$accessToken = "";
$accessTokenSecret = "";
$count= 10;//データ取得件数(MAX 100)
$lifetime = 00;//キャッシュ時間(秒)
//キャッシュ
$options = array(‘cacheDir’ => ‘dytw_cached/’,’caching’ => true,’lifeTime’ => $lifetime, ‘automaticCleaningFactor’ => ‘100’);
$cache_id=’dy’.rawurlencode($keyword);
$data_cache = new Cache_Lite($options);
$string=$data_cache->get($cache_id);
//データ取得
if(!$string){
$connection = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
$string = $connection->OAuthRequest(‘https://api.twitter.com/1.1/search/tweets.json’, ‘GET’, array("q"=>rawurlencode($keyword),"result_type"=>"recent", "count"=>$count));
$data_cache->save($string,$cache_id);
}
//echo $string;
$obj = json_decode($string);
//var_dump($obj);
//データ生成
$str_contents = "";
if ($obj->statuses) {
foreach ($obj->statuses as $statuses) {
//タイムスタンプ
$time = strtotime($statuses->created_at);
$time = date("Y年m月j日 H時i分",$time);
$text = htmlspecialchars(str_replace(array("rn","r","n"), ”, $statuses->text));
$rt_text = ‘RT @’.$statuses->text;
$rt_link = ‘ <a href="javascript:void(0)" onclick="document.location=’http://twitter.com/home?status=’+encodeURI(”.$rt_text.”)">RT</a>’;
$re_text = ‘@’.$statuses->from_user;
$text = auto_link($text);
$re_link = ‘ <a href="javascript:void(0)" onclick="document.location=’http://twitter.com/home?status=’+encodeURI(”.$re_text.”)+’&in_reply_to_status_id=’+encodeURI(”.$statuses->id_str.”)">Re</a>’;
$str_contents .= "<p><a href="http://twitter.com/{$statuses->from_user}" target="_blank"><img src="{$statuses->user->profile_image_url}" width="48" height="48" alt="{$statuses->user->screen_name}" class="twimg"></a> <a href="http://twitter.com/{$statuses->user->screen_name}" target="_blank">@{$statuses->user->screen_name}</a> [{$time}] {$rt_link} {$re_link}</p>";
$str_contents .= "<p style=’border-bottom:2px solid #dddddd;padding-bottom:10px;margin-bottom:25px’>{$statuses->text}</p>";
}
} else {
$str_contents = "";
}
if($str_contents){
$str_contents = ‘<div id="twiform" style="border:solid #cccccc 2px;padding:20px;margin:10px 0">’.$str_contents.'</div>’;
}
function auto_link ($text) {
return preg_replace(‘/([^="’>]|^)(https?|ftp)(://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)/’, ‘$1<a href="$2$3" target="_blank">$2$3</a>’, $text);
}
echo $str_contents;
?>[/php]
ポイント
・Auth認証が必要
1.1から全てのデータ取得にAuth認証が必要になりました。コード内に記述するキーとトークンは、Twitterのアプリケーション開発ページから取得する必要があります。
そして、PHP認証ライブラリ「twitteroauth」が必要です。
方法は小粋空間さんの記事が分かりやすいです。
・取得回数に制限
今回利用するGET search/tweetsは15分間に180回までリクエストできます。1分間に12回、5秒に1回リクエストです。5秒間キャッシュをすれば良いですが、設定は余裕をみて、60秒にしておきました。
その他の制限については、REST API v1.1 Limits per window by resourceを参照してください。
・GET search/tweetsのパラメータが変更
GET search/tweetsでは、取得件数は最大100件まで。pageのパラメータ設定ができなくなっていますので、ご注意ください。指定できるパラメータについては、GET search/tweetsを参照してください。
ご参考にどうぞ!
コメント