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のアカウントも作ってませんのでいい加減に・・・