photo by Mark
タグクラウドってありますよね?
ちょっと前に流行ったサービスで、ツイッターの発言を解析して最近つぶやいてるワードをタグクラウドにして表示してくれる、というものがあったかと思います。
あれを複数のアカウントに対してできるコードを書いてみました。
これを使えば「SMAPメンバーたちのつぶやき」からタグクラウドを生成したり、「自民党議員たちのつぶやき」からタグクラウドを生成したり、いろんな遊び方ができる思います。
以下導入方法です!
必要なファイル・ライブラリ
必要なファイルは「twcloud.php」と「list.txt」です(←今回私が作ったファイルです)
必要なライブラリは「TwitterOAuth」です。
各ファイル・ライブラリを、こんな感じに配置してください。
twicloud
│ twcloud.php
│ list.txt
└─twitteroauth-master
※本コードは「PHP 5.4」で動作確認しました。これより低いバージョンだともしかしたら動かないかもしれないのでご注意ください。
※コード中で「Twitter API」と「Yahoo API テキスト解析:キーフレーズ抽出」を利用しています。あらかじめこれらの開発者アカウントの申請を済ませておいて、APIキーを入手しておいてください。
「twcloud.php」
「twcloud.php」の内容です。
このファイルを実行すると、「list.txt」に書いてあるTwitterユーザーの直近のつぶやき100件を取得して、そこからタグクラウドを生成して、結果をプリント出力します。
例外処理とかがてきとうなので、気に入らなかったらてきとうに修正してください。
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 |
<?php require_once(dirname(__FILE__)."/twitteroauth-master/autoload.php"); use Abraham\TwitterOAuth\TwitterOAuth; //Twitter OAuthパラメータ $consumer_key = 'hogege'; $consumer_secret = 'hogegege'; $access_token = 'fugaga'; $access_secret = 'fugagaga'; //yahooID $yahoo_id = 'piyoyo'; //ユーザーリストを読み込み $list = read_user_list(); if (!$list){ echo "エラー:list.txtの読み込みに失敗しまいした"."\n"; return; } //全ユーザーのつぶやきを取得 $all_tweets = array(); foreach ($list as $user){ $tweet_list = get_user_tweets($user); //つぶやきを取得 if (!is_array($tweet_list)){ echo "エラー:ユーザー".$user."のtweetを取得できませんでした"."\n"; return; }else{ echo "ユーザー".$user."のtweet取得完了!"."\n"; } $all_tweets = array_merge($all_tweets, $tweet_list); usleep(100000); //0.1秒待機 } //全つぶやきをyahoo apiで解析 $all_tags = array(); foreach ($all_tweets as $tweet){ $tag_list = analyze_key_phrase($tweet); //キーワード解析 if (!is_array($tag_list)){ echo "エラー:yahoo apiが利用出来ません"."\n"; return; } $all_tags = array_merge($all_tags, $tag_list); usleep(100000); //0.1秒待機 } //キーワードからタグクラウドを集計 $tag_cnt = array_count_values($all_tags); arsort($tag_cnt); //結果プリント $tag_cnt = array_slice($tag_cnt, 0, 30); //top30だけ表示 foreach ($tag_cnt as $key=>$val){ echo($key."(".$val."個)"."\n"); } //list.txtに書いてあるユーザリストを読み込んで配列として返却する関数 function read_user_list(){ $filename = dirname(__FILE__)."/list.txt"; $filestr = file_get_contents($filename); if (!$filestr){ return null; } $list = explode("\n", $filestr); //配列に変換 $list = array_filter($list, "strlen"); //空白要素を削除 return $list; } //指定されたtwitterユーザの直近100件のつぶやきを取得して配列として返却する関数 function get_user_tweets($screen_name){ extract($GLOBALS); //タイムラインの情報をゲット $options = array( "screen_name"=>$screen_name, //ユーザ名 "count"=>100, //取得件数 "include_rts"=>false, //リツイートを含める "exclude_replies"=>true //リプライを除外 ); $tw = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_secret); $tw_ret = $tw->get("statuses/user_timeline", $options); if (!$tw_ret || (is_object($tw_ret) && property_exists($tw_ret, "error"))){ return null; } $tweets = array(); foreach ($tw_ret as $val){ $tweets[] = $val->text; } return $tweets; } //与えられた文字列をyahoo_api解析にかけてキーフレーズの配列を返却する関数 function analyze_key_phrase($str){ extract($GLOBALS); $url = "http://jlp.yahooapis.jp/KeyphraseService/V1/extract"; $params = array( 'sentence' => $str); $ch = curl_init($url); curl_setopt_array($ch, array( CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => "Yahoo AppID: $yahoo_id", CURLOPT_POSTFIELDS => http_build_query($params), )); $result = curl_exec($ch); $errno = curl_errno($ch); curl_close($ch); if (CURLE_OK !== $errno) { //curlエラー発生 return null; } //結果をxmlで取得 $xml = new SimpleXMLElement($result); if (is_object($xml) && property_exists($xml, "Message")){ //yahoo apiエラー発生 return null; } $tags = array(); foreach ($xml as $val){ $tags[] = (string)$val->Keyphrase; } return $tags; } ?> |
「list.txt」
「list.txt」には、解析対象となるツイッターアカウントのスクリーンネーム一覧を記述します。
例えば「ラブライブの声優さんたちのつぶやきからタグクラウドを作りたい!」と思ったら、以下のように記述します。
1 2 3 4 5 6 7 8 |
Nitta_Emi aya_uchida mimori_suzuko rippialoha pile_eric tokui_sorangley kusudaaina nanjolno |
「TwitterOAuth」ライブラリ
本コードはTwitter APIを利用するために「TwitterOAuth」のライブラリを使用しています。
TwitterOAuthライブラリを利用するには、下記のアブラハムさんのページからzipをダウンロードして、その中にある「twitteroauth-master」のディレクトリを「twcloud.php」と同じディレクトリに置いてください。
Twitter APIとYahoo API
本コードはTwitterのつぶやきを取得するために「Twitter API」を使っています。Twitter APIを利用するためにはAPIキーが必要です。あらかじめTwitter開発者アカウントを申請して、APIキーを取得しておいてください。
※Twitter APIには「180回/15分」といったような利用制限があり、頻繁にAPIを使うと利用できなくなる可能性があるのでご注意ください。
また、本コードでは文字列中の単語を解析するために「Yahooテキスト解析:キーフレーズ抽出API」を使っています。Yahoo APIを利用するためにはAPIキーが必要です。あらかじめYahoo開発者アカウントを申請して、APIキーを取得しておいてください。
※Yahoo APIには「50000回/一日」といったような利用制限があり、頻繁にAPIを使うと利用できなくなる可能性があるのでご注意ください。
おまけ
動作確認のために、下記のラブライブの声優さんたちのつぶやきからタグクラウドを作ってみました!果たしてどんな結果になるでしょうか・・!?
・新田恵海さん(@Nitta_Emi)
・内田彩さん(@aya_uchida)
・三森すずこさん(@mimori_suzuko)
・飯田里穂さん(@rippialoha)
・Pileさん(@pile_eric)
・徳井青空さん(@tokui_sorangley)
・楠田亜衣奈さん(@kusudaaina)
・南條愛乃(@nanjolno)
結果!
1 2 3 4 5 6 7 8 9 10 11 |
ラブライブの声優さんたちのつぶやきタグクラウド トップ10(2016 1/13時点) 1位・・・RT(109個) 2位・・・笑(48個) 3位・・・たー(32個) 4位・・・みんな(29個) 5位・・・楠田亜衣(28個) 6位・・・私(26個) 7位・・・予定(24個) 8位・・・グッズ(23個) 9位・・・本日(23個) 10位・・・機会(22個) |
なるほど、こういう感じになりましたか~!以下順番に考察していきましょう!
・1位「RT」
みなさんリツイートを使って積極的にお仕事の情報を発信してるみたいです。フォロワーの数がすごいのでとても拡散力がありそうですね。
・2位「笑」
何か楽しい会話をしてるのでしょうか。「w」じゃなくてなんだかよかったです(笑)
・3位「たー」
私は初めこの言葉の意味がよく分からなかったのですが、どうやらみなさん「たー!」と語尾に付けて話すことが多いためランクインしたみたいです。声優さんたちの間で流行っている語尾なのでしょうか・・?
・4位「みんな」
ファンの方々に「みんなー!」と声をかけて積極的に呼びかけているみたいです。ラブライバーたちの結束力がますますアップしそうですね。
・5位「楠田亜衣」
楠田亜衣さんがお仕事情報のつぶやきをされているみたいです。くっすんサポーターを募集されてるらしいのでみなさん応募してあげてください!
以上、ちゃんと動作してるみたいです。よかったよかった。