PHPでTwitterのbotを作ってみた
シンプルなやつね。
- ある人が、あるキーワードを呟くとリプする。
- 作った理由
- その人に自分でいちいち突っ込むのが面倒だったから
コード
<?php // twitteroauth.phpを読み込む。 require_once("../twitteroauth/twitteroauth.php"); // 定数 define("DEBUG_MODE", FALSE); define("USER_ID", "hogehoge"); // USER_ID(アットマークなし) define("KEYWORD", "きーわーど"); // 反応するキーワード define("CRON_SPAN", 60); // CRONをぶん回す感覚(sec) // Consumer keyの値 $consumer_key = "Consumer key"; // Consumer secretの値 $consumer_secret = "Consumer secret"; // Access Tokenの値 $access_token = "Access_token"; // Access Token Secretの値 $access_token_secret = "Access Token Secret"; // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); // ユーザータイムラインの取得。TwitterからXML形式が返ってくる $req = $to->OAuthRequest("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=".USER_ID,"GET",array("count"=>"10")); // XML文字列をオブジェクトに代入する $xml = simplexml_load_string($req); foreach($xml->status as $status) { $text = $status->text; // Tweetの内容 $created_at = $status->created_at; // Tweetした時刻取得 $status_id = $status->id; // つぶやきのステータスID if (strstr($text, KEYWORD) && strtotime($created_at)>strtotime("-".CRON_SPAN."seconds")) { // in_reply_to_status_idを指定するのならば array("status"=>"@hogehoge reply","in_reply_to_status_id"=>"0000000000"); とする。 $req = $to->OAuthRequest("http://api.twitter.com/1/statuses/update.xml" , "POST" , array( "status" => "@" . USER_ID . " " . Reply() , "in_reply_to_status_id" => "$status_id" )); } } // リプライ用テキストジェネレーター function Reply() { $reply_array = array("aaa", "bbb", "ccc"); // 配列を作って $key = array_rand($reply_array); // ランダムで配列のキーを取得 return $reply_array[$key]; // 一個取得して返す } // ユーザータイムラインを取得できているか確認する(DEBUG_MODE=TRUE時) if (DEBUG_MODE) { if (strstr($text, KEYWORD) && strtotime($created_at)>strtotime("-".CRON_SPAN."seconds")) { echo "mingosss"; } foreach($xml->status as $status){ $status_id = $status->id; // 呟きのステータスID $text = $status->text; // 呟き $user_id = $status->user->id; // ユーザーナンバー $screen_name = $status->user->screen_name; // ユーザーID(いわゆる普通のTwitterのID) $name = $status->user->name; // ユーザーの名前(HNなど) echo "<p><b>".$screen_name." / ".$name."</b> <a href=\"http://twitter.com/".$screen_name."/status/".$status_id."\">この呟きのパーマリンク</a><br />\n".$text."</p>\n"; } } ?>
- ここらへんを非常に参考にしました。
PHP+OAuthでTwitter - SDN Project
- 反省
- 一人のユーザーにしか対応していない。
- ひとつのキーワードにしか反応しない。
- 気が向いたらDBと連携して遊んでみよう!
- あとgithubのアカウントも作ってませんのでいい加減に・・・