ツイート検索結果をリスト表示するコードを書いたよ 新TwitterAPI1.1版

当ブログの記事に共感していただけたら、また読みに来ていただけると嬉しいです。読んでくれる方の数が多くなると、更新するヤル気に繋がります(^^)

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

DSC_8046

TwitterAPIのバージョンは1.0から1.1に変更になっていたことを忘れていました。TwitterAPI1.0は2013.4.12段階では動いていましたが、いつ停止してもおかしくない状況です。

ツイート検索結果をリスト表示しているサービスがあったので、コードをTwitterAPI1.1で書き直しました。言語はPHPです。

スポンサーリンク

コード

こんな感じのコードを書きました。

$keyword、$consumerKey、$consumerSecret、$accessToken、$accessTokenSecretの設定が必要です。

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("\r\n","\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;\/?:\@&amp;=+\$,%#]+)/', '$1<a href="$2$3" target="_blank">$2$3</a>', $text);
}
echo $str_contents;
?>

ポイント

・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を参照してください。

ご参考にどうぞ!

関連記事

関連記事

スポンサーリンク

当ブログの記事に共感していただけたら、また読みに来ていただけると嬉しいです。読んでくれる方の数が多くなると、更新するヤル気に繋がります(^^)

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローしていただけると、ブログ更新を見逃しません

push7 feedly
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です