「#週末夜の幻水お絵描き一時間勝負」のハッシュタグを含むツイートをAPIで取得する

特定のハッシュタグを持つツイートをAPIを利用して取得、利用する方法です。ライブラリには TwistOAuth を用います。

ソースコード先行でいきましょう。以下のようになります。

<?php

// ライブラリ読み込み
require __DIR__ . '/TwistOAuth.phar';

// Twitter API 認証情報
$consumerKey = '';
$consumerSecret = '';
$accessToken = '';
$accessTokenSecret = '';

// TwitterAPIに接続するあらゆる正常時の処理はこのブロックの中で行う
try {
    // 接続
    $to = new TwistOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);

	// ハッシュタグ「#週末夜の幻水お絵描き一時間勝負」を含むツイートを検索する
	$search_query = "#週末夜の幻水お絵描き一時間勝負";
	$status = $to->get('search/tweets', ['q' => $search_query, 'count' => 100]);

	$loop_count = count($status->statuses);

	for ($i = 0; $i < $loop_count; $i++) {
		// ツイートのURLを既存情報を組み合わせて生成する
		$user_screen_name = $status->statuses[$i]->user->screen_name;
		$tweet_id = $status->statuses[$i]->id_str;
		$tweet_url = "https://twitter.com/" . $user_screen_name . "/status/" . $tweet_id;

		// 書き込む内容を変数に入れる
		$write_data = $write_data . $tweet_url . "\n";
	}

        // 書き込む内容の表示
	print $write_data;
?>

「書き込む内容を変数に入れる」とあるように、この処理は外部に吐き出すことを前提として書いていますが、書き込む処理のところは上記コード内では省略しています。

やっていることは単純で、TwitterのAPIの仕様に沿って q と count を search/tweets で GET しているだけです。q に検索ワードである「#週末夜の幻水お絵描き一時間勝負」を指定しています。count はめいっぱいの 100 を指定しています。

上記では「#週末夜の幻水お絵描き一時間勝負」を含む直近の100ツイートを print して表示させています。

APIで得られるJSONには様々なデータ(ツイートした人は誰か、RTか否か、ツイートされた内容、画像が添付されていればそのURL、などなど)が含まれています。具体的には、一つのツイートから得られるJSONは末尾に付記したようになります。先ほどのAPIの仕様のページにも載っています。

このJSONから欲しいデータを抜き出せば、例えばツイート本文だけを抜き出してテキスト処理をしたり、添付画像が含まれていたらその画像を羅列したりなどといったデータを扱う処理のほとんどは行えるでしょう。

定期的にcronでこのコードを実行してDBに記録するようにすれば、完全自動でツイートを自動収集、好きなときに好きな表示方法(抽出方法)でツイートを綺麗にまとめて表示できます。アンケートやランキングの作成などにも活用できると思います。

stdClass Object
(
    [statuses] => Array
        (
            [0] => stdClass Object
                (
                    [metadata] => stdClass Object
                        (
                            [iso_language_code] => ja
                            [result_type] => recent
                        )

                            [created_at] => Sun May 24 12:00:43 +0000 2015
                            [id] => 602444110251692032
                            [id_str] => 602444110251692032
                            [text] => 【幻水ワンドロ企画】
開始時間になりました!
本日のお題は「天牢星・天彗星・天暴星・天哭星」です。
終了時間にまたアナウンスいたしますのでよろしくお願いします!
#週末夜の幻水お絵描き一時間勝負
                            [source] => <a href="http://twittbot.net/" rel="nofollow">twittbot.net</a>
                            [truncated] => 
                            [in_reply_to_status_id] => 
                            [in_reply_to_status_id_str] => 
                            [in_reply_to_user_id] => 
                            [in_reply_to_user_id_str] => 
                            [in_reply_to_screen_name] => 
                            [user] => stdClass Object
                                (
                                    [id] => 2437080884
                                    [id_str] => 2437080884
                                    [name] => 幻水ワンドロ企画
                                    [screen_name] => gensui1draw
                                    [location] => 百万世界
                                    [description] => 幻想水滸伝シリーズのワンドロ企画のアカウントです。週2日(土日で同じお題)21時~22時に開催いたします。言い出しっぺはこちら【@wfmdrak】【@minami_danboru】※言いだしっぺが多忙の際はbotを使用します。うまく作動しなくてもワンドロは実施されますのでよろしくお願いします。
                                    [url] => http://t.co/Ykyh2S9l6w
                                    [entities] => stdClass Object
                                        (
                                            [url] => stdClass Object
                                                (
                                                    [urls] => Array
                                                        (
                                                            [0] => stdClass Object
                                                                (
                                                                    [url] => http://t.co/Ykyh2S9l6w
                                                                    [expanded_url] => http://togetter.com/id/gensui1draw
                                                                    [display_url] => togetter.com/id/gensui1draw
                                                                    [indices] => Array
                                                                        (
                                                                            [0] => 0
                                                                            [1] => 22
                                                                        )

                                                                )

                                                        )

                                                )

                                            [description] => stdClass Object
                                                (
                                                    [urls] => Array
                                                        (
                                                        )

                                                )

                                        )

                                    [protected] => 
                                    [followers_count] => 1040
                                    [friends_count] => 1125
                                    [listed_count] => 68
                                    [created_at] => Thu Apr 10 14:16:14 +0000 2014
                                    [favourites_count] => 22
                                    [utc_offset] => 
                                    [time_zone] => 
                                    [geo_enabled] => 
                                    [verified] => 
                                    [statuses_count] => 1424
                                    [lang] => ja
                                    [contributors_enabled] => 
                                    [is_translator] => 
                                    [is_translation_enabled] => 
                                    [profile_background_color] => C0DEED
                                    [profile_background_image_url] => http://abs.twimg.com/images/themes/theme1/bg.png
                                    [profile_background_image_url_https] => https://abs.twimg.com/images/themes/theme1/bg.png
                                    [profile_background_tile] => 
                                    [profile_image_url] => http://abs.twimg.com/sticky/default_profile_images/default_profile_0_normal.png
                                    [profile_image_url_https] => https://abs.twimg.com/sticky/default_profile_images/default_profile_0_normal.png
                                    [profile_link_color] => 0084B4
                                    [profile_sidebar_border_color] => C0DEED
                                    [profile_sidebar_fill_color] => DDEEF6
                                    [profile_text_color] => 333333
                                    [profile_use_background_image] => 1
                                    [default_profile] => 1
                                    [default_profile_image] => 1
                                    [following] => 
                                    [follow_request_sent] => 
                                    [notifications] => 
                                )

                            [geo] => 
                            [coordinates] => 
                            [place] => 
                            [contributors] => 
                            [retweet_count] => 1
                            [favorite_count] => 0
                            [entities] => stdClass Object
                                (
                                    [hashtags] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [text] => 週末夜の幻水お絵描き一時間勝負
                                                    [indices] => Array
                                                        (
                                                            [0] => 81
                                                            [1] => 97
                                                        )

                                                )

                                        )

                                    [symbols] => Array
                                        (
                                        )

                                    [user_mentions] => Array
                                        (
                                        )

                                    [urls] => Array
                                        (
                                        )

                                )

                            [favorited] => 
                            [retweeted] => 
                            [lang] => ja
                        )

                    [retweet_count] => 1
                    [favorite_count] => 0
                    [entities] => stdClass Object
                        (
                            [hashtags] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [text] => 週末夜の幻水お絵描き一時間勝負
                                            [indices] => Array
                                                (
                                                    [0] => 98
                                                    [1] => 114
                                                )

                                        )

                                )

                            [symbols] => Array
                                (
                                )

                            [user_mentions] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [screen_name] => gensui1draw
                                            [name] => 幻水ワンドロ企画
                                            [id] => 2437080884
                                            [id_str] => 2437080884
                                            [indices] => Array
                                                (
                                                    [0] => 3
                                                    [1] => 15
                                                )

                                        )

                                )

                            [urls] => Array
                                (
                                )

                        )

                    [favorited] => 
                    [retweeted] => 
                    [lang] => ja
                )

            [1] => stdClass Object
                (
                    [metadata] => stdClass Object
                        (
                            [iso_language_code] => ja
                            [result_type] => recent
                        )
        )

)
Powered by はてなブログ