Hatena::ブログ(Diary)

玄鵬の地下室

2009-02-01

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で諸葛亮に話しかけても反応します。お試しあれ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/genhou/20090201/1233499182
Connection: close