2011年09月10日に投稿

[PHP]Twitter APIを利用して検索結果を取得する

Twitterには検索機能があり指定したキーワードでツイートを検索することができます。興味のあるキーワードやハッシュタグ、URL等で検索すると面白いタイムラインを作ることができます。この検索結果をPHPを利用して取得します。

下記のサンプルはキーワード「ブロッコリー」でTwitterを検索した時の検索結果を取得してvar_dump関数で中身を表示せます。なお、JSON形式のデータのデコードにServices_JSONを使用しています。

[php]
decode($response));
?>
[/php]

長いので繰り返されている箇所は省略してありますが、下記が検索結果として取得したデータをvar_dump関数で出力したものです。下記の内容を見ると、resultsプロパティに結果の配列が15件入っているようです。

[html]
object(stdClass)#2 (11) {
[“completed_in”]=>
float(0.171)
[“max_id”]=>
float(1.12510849201E+17)
[“max_id_str”]=>
string(18) “112510849201086465”
[“next_page”]=>
string(90) “?page=2&max_id=112510849201086465&q=%E3%83%96%E3%83%AD%E3%83%83%E3%82%B3%E3%83%AA%E3%83%BC”
[“page”]=>
int(1)
[“query”]=>
string(54) “%E3%83%96%E3%83%AD%E3%83%83%E3%82%B3%E3%83%AA%E3%83%BC”
[“refresh_url”]=>
string(85) “?since_id=112510849201086465&q=%E3%83%96%E3%83%AD%E3%83%83%E3%82%B3%E3%83%AA%E3%83%BC”
[“results”]=>
array(15) {
[0]=>
object(stdClass)#3 (14) {
[“created_at”]=>
string(31) “Sat, 10 Sep 2011 13:00:51 +0000”
[“from_user”]=>
string(8) “to_kage_”
[“from_user_id”]=>
int(397060228)
[“from_user_id_str”]=>
string(9) “397060228”
[“geo”]=>
NULL
[“id”]=>
float(1.12510849201E+17)
[“id_str”]=>
string(18) “112510849201086465”
[“iso_language_code”]=>
string(2) “ja”
[“metadata”]=>
object(stdClass)#4 (1) {
[“result_type”]=>
string(6) “recent”
}
[“profile_image_url”]=>
string(63) “http://a0.twimg.com/profile_images/1517135956/Image2_normal.png”
[“source”]=>
string(86) “<a href="http://twtr.jp" rel="nofollow">Keitai Web</a>”
[“text”]=>
string(73) “サドルブロッコリーの犯人は東大生じゃないべw 確かww”
[“to_user_id”]=>
NULL
[“to_user_id_str”]=>
NULL
}
[1]=>
object(stdClass)#5 (14) {
[“created_at”]=>
string(31) “Sat, 10 Sep 2011 13:00:46 +0000”
[“from_user”]=>
string(13) “favstar50_ja2”
[“from_user_id”]=>
int(252800039)
[“from_user_id_str”]=>
string(9) “252800039”
[“geo”]=>
NULL
[“id”]=>
float(1.12510828485E+17)
[“id_str”]=>
string(18) “112510828485419009”
[“iso_language_code”]=>
string(2) “ja”
[“metadata”]=>
object(stdClass)#6 (1) {
[“result_type”]=>
string(6) “recent”
}
[“profile_image_url”]=>
string(72) “http://a2.twimg.com/profile_images/1277076129/twitterAvatar50_normal.png”
[“source”]=>
string(114) “<a href="http://sites.google.com/site/yorufukurou/" rel="nofollow">YoruFukurou</a>”
[“text”]=>
string(413) “RT @mini_humbucker: 【東大】サドルにブロッコリー【京大】サドルが折田先生【阪大】サドルにGentooをインストール【筑波大】サドルに女装用ウィッグ【芸大】「サドルという概念を壊したかった」自転車12台を使った巨大オブジェ【音大】サドルを取り外して穴を空けフレームを笛に【Fラン】普通にサドル無い”
[“to_user_id”]=>
NULL
[“to_user_id_str”]=>
NULL
}

…繰り返し…

[14]=>
object(stdClass)#31 (14) {
[“created_at”]=>
string(31) “Sat, 10 Sep 2011 12:59:46 +0000”
[“from_user”]=>
string(7) “crevavo”
[“from_user_id”]=>
int(91839471)
[“from_user_id_str”]=>
string(8) “91839471”
[“geo”]=>
NULL
[“id”]=>
float(1.12510574793E+17)
[“id_str”]=>
string(18) “112510574792937473”
[“iso_language_code”]=>
string(2) “ja”
[“metadata”]=>
object(stdClass)#32 (1) {
[“result_type”]=>
string(6) “recent”
}
[“profile_image_url”]=>
string(65) “http://a2.twimg.com/profile_images/1525155179/marukyuu_normal.png”
[“source”]=>
string(114) “<a href="http://sites.google.com/site/yorufukurou/" rel="nofollow">YoruFukurou</a>”
[“text”]=>
string(413) “RT @mini_humbucker: 【東大】サドルにブロッコリー【京大】サドルが折田先生【阪大】サドルにGentooをインストール【筑波大】サドルに女装用ウィッグ【芸大】「サドルという概念を壊したかった」自転車12台を使った巨大オブジェ【音大】サドルを取り外して穴を空けフレームを笛に【Fラン】普通にサドル無い”
[“to_user_id”]=>
NULL
[“to_user_id_str”]=>
NULL
}
}
[“results_per_page”]=>
int(15)
[“since_id”]=>
int(0)
[“since_id_str”]=>
string(1) “0”
}
[/html]

この結果からそれぞれのスクリーンネーム、ツイート本文、投稿日時、アイコン画像のURLを取り出します。そこでコードを以下のように書き換えることで15件のツイートそれぞれの情報を表示することができました。

[php]
decode($response);

foreach($data->results as $value){
print $value->from_user . ‘
‘;
print $value->text . ‘
‘;
print $value->created_at . ‘
‘;
print $value->profile_image_url . ‘
‘;
print ‘
‘;
}
?>
[/php]

公式ドキュメントによるとGETリクエストを送信する際にパラメーターを付加することで一度に取得する件数を増やしたり、検索結果を続きを取得したりすることができるようです。ただ過去の全てのツイートを全て取得することはできないようなので、分析ツールを作りたい場合は自分でDBを用意して保存しておく必要があります。

関連記事

One Response to “[PHP]Twitter APIを利用して検索結果を取得する”

  1. […] Published on 2012年12月3日 by torigoya in PHP 参考サイト [PHP]Twitter APIを利用して検索結果を取得する pearからJSON.phpを入手 Proposal for […]

Leave a Reply