phpでtwitterのbotを作る(返信編)

phpでbotを作るの続き。
前回、取得と投稿をやったので、今回は返信編。
twitterの仕組みとして、アカウント名の前に@を付けると、フォローしていた場合TLに現れる(他にも確認の方法ある)
これをbotの機能として付けるとしたら、「@自分のアカウント」のメッセージを拾って、その発言をした相手の名前を入れたメッセージを投稿しなければならない…ってことですね。
まずソース。

<?php

$username = "なまえ";
$password = "パスワード";

//最新の返信発言を残しておくためのファイル
$filename = "./tmp/data.txt";

//ファイル読み込む
$fp = @fopen($filename,'rb') or die("ファイルが開けません");
flock($fp, LOCK_EX);
$line = fgets($fp, 64);
fclose($fp); 

//最新id
$s_name=$line;


//Twitter APIのメソッドURLを設定する
$host = "http://twitter.com/statuses/mentions.xml?count=1";    //@返信一覧の最新一件

//cURLセッションを初期化する、ここらへんは前と一緒
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$result = curl_exec($ch);
curl_close($ch);

//XML文字列をオブジェクトに代入する 
$XML = simplexml_load_string($result);


//$xmlを解析して発言idや名前なんかを取り出し加工
$string = $XML->status[0]->id;
$dat = (string)$string;

$var =  $XML->status[0]->text;
$massage = ereg_replace("\@$username", "", $var);
$reply_name = $XML->status[0]->user->screen_name;
$reply_name = "@$reply_name";
$name = $XML->status[0]->user->name;

//投稿部分を整え
$massage = $reply_name." "ここらへんは自分で考えてね!";

//読み込んだ最新idが同じ場合はスルー、違う場合は相手への返信を投稿
if($dat != $s_name){
//投稿部分は前やったのと同じ
    tweet($massage ,$username,$password);
//投稿と一緒に最新idをファイルに書き込み
file_put_contents($filename,$dat,LOCK_EX);
}

//以下略

?>

えーと、解説です。

//最新の返信発言を残しておくためのファイル
$filename = "./tmp/data.txt";

もちろん書き込み可にしておく。

$host = "http://twitter.com/statuses/mentions.xml?count=1";    //@返信一覧の最新一件

最新のapi翻訳によると、今までのrepliesでもいいのですが今後はmentionsがメインで使われるだろうとのことでこっちにしました。引数のcount=1は最新1件だけという指定。

あとは今の最新@返信と記録されたファイルを比較して違っていたら投稿する。同時にファイル書き換え。

2分間隔でcron実行させてます。
欠点あります。この2分の間隔の間に複数の@が来ても最新1件の人しか返信出来ません

もっとうまいやり方もあるんでしょうけど…改良の余地有り。でも、とりあえず動いてます。
返信の内容とかは省略。工夫次第で色々面白い事が出来ると思います。