Twitterには検索機能があり指定したキーワードでツイートを検索することができます。興味のあるキーワードやハッシュタグ、URL等で検索すると面白いタイムラインを作ることができます。この検索結果をPHPを利用して取得します。
下記のサンプルはキーワード「ブロッコリー」でTwitterを検索した時の検索結果を取得してvar_dump関数で中身を表示せます。なお、JSON形式のデータのデコードにServices_JSONを使用しています。
1 2 3 4 5 6 7 8 9 10 |
<?php include 'JSON.php'; $url = 'http://search.twitter.com/search.json?q=' . urlencode('ブロッコリー'); $response = file_get_contents($url); $json = new Services_JSON; var_dump($json->decode($response)); ?> |
長いので繰り返されている箇所は省略してありますが、下記が検索結果として取得したデータをvar_dump関数で出力したものです。下記の内容を見ると、resultsプロパティに結果の配列が15件入っているようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
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" } |
この結果からそれぞれのスクリーンネーム、ツイート本文、投稿日時、アイコン画像のURLを取り出します。そこでコードを以下のように書き換えることで15件のツイートそれぞれの情報を表示することができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php include 'JSON.php'; $url = 'http://search.twitter.com/search.json?q=' . urlencode('ブロッコリー'); $response = file_get_contents($url); $json = new Services_JSON; $data = $json->decode($response); foreach($data->results as $value){ print $value->from_user . '<br />'; print $value->text . '<br />'; print $value->created_at . '<br />'; print $value->profile_image_url . '<br />'; print '<br />'; } |
公式ドキュメントによるとGETリクエストを送信する際にパラメーターを付加することで一度に取得する件数を増やしたり、検索結果を続きを取得したりすることができるようです。ただ過去の全てのツイートを全て取得することはできないようなので、分析ツールを作りたい場合は自分でDBを用意して保存しておく必要があります。
[…] Published on 2012年12月3日 by torigoya in PHP 参考サイト [PHP]Twitter APIを利用して検索結果を取得する pearからJSON.phpを入手 Proposal for […]