twitterで諸葛亮botを作ってみた

又吉イエスbotに触発されたので、「孔明の罠」に反応する諸葛孔明botを勢いで作った。反省はしていない。

http://twitter.com/shokatsuryou

技術的な詳しいメモは、また後日書く。

[ 2009/02/02 追記 ]
今回制作した諸葛亮botの仕様についてはここを参照。http://www.genhou.com/product/2009/01/twitter_komei.html
twitter上で特定のキーワードがつぶやかれたら、その人宛てに予め用意されたセリフを投稿するphpファイルを用意し、cronジョブで一定時間ごとに自動で実行させるというもの。twitterに投稿する部分のコードは、http://d.hatena.ne.jp/hirataka522/20080126/1201300282を参考にした。
検索はhttp://pcod.no-ip.org/yats/APIを利用。私の場合は下記のようにXMLで取得した。

//$search_word:反応させるキーワード
$xml = simplexml_load_file('http://pcod.no-ip.org/yats/search?query='.$search_word.'&rss');

そんで、発言させる内容を書いて・・・

$msg_pattern = array( "[someone]発言0",
"[someone]発言1",
"[someone]発言2",
"[someone]発言3",
"[someone]発言4",
);

読み込んだXMLをもとにつぶやきを投稿する

if($xml) {
//var_dump ($xml);
//該当する最新5件の発言を取得
for($i=0;$i<5;$i++){

$post_member = (string)$xml->entry[$i]->title;
$post_date = $xml->entry[$i]->updated;

//発言時刻を取得し、タイムスタンプに
// 32400はGMTと日本時間とのズレ(9時間)
$date_array = array();
$rcd = mbereg("^([0-9]{4}).([0-9]{2}).([0-9]{2})T([0-9]{2}).([0-9]{2}).([0-9]{2})Z$",$post_date,$date_array);
$post_time = 32400 + mktime($date_array[4],$date_array[5],$date_array[6],$date_array[2],$date_array[3],$date_array[1]);
//発言の経過時間
$pasttime = $now_time - $post_time;

//発動は15分以内の発言に対して
if($pasttime > 0 && $pasttime < 900 && !array_search($post_member,$followed)){
$tofollow = "@".$post_member." ";

//発言をランダムで選択、相手の名前を置換
$msg = preg_replace("[\[someone\]]",$tofollow,$msg_pattern[mt_rand(0,count($msg_pattern)-1)]);

//twitterへの書き込み
$params = "status=". rawurlencode($msg);
$result = file_get_contents($url.$params , false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
)));

if($result){
echo "成功";
mb_send_mail("hogehoge@sample.com","【twitter_bot】","下記のように投稿しました。\n\n".$msg);
}
//
array_push($followed,$post_member);
}
}

}else{
return;
}

この仕様では、15分以内の発言のうち最新5件をカバーする。ただし相手が重複していた場合は除く。これでcronジョブを15分ごとにまわせばちょうど良いかと。カバーした発言をSQLに保存したりはしてないので、cronジョブの間隔に合わせてコードを書いている。

よろしければお使い下さい。


[ 2009/02/05追記 ]
セリフさらに追加。ヴァリエーションが増しました。
@shokatsuryouで諸葛亮に話しかけても反応します。お試しあれ。