Twitterbot作り 〜やっちゃうよ〜

待っている人がいると思って、急いで書いたら重要なもの忘れてたぜ。
tenkiさん、コメントして頂きありがとうございました。


最後だって書いたけど、舞い戻って来た。
リプライソースも書きます。


重要なもの、それはdata.txt。
これすんげぇ重要。
リプライの時に重複返信を防止する。


testディレクトリにdata.txtを作ってください。
utf-8に変えなくてもおk。
青フロッピーアイコンで保存。


その次はdata.txtの許可情報を変更してください。
新規ディレクトリボタンの反対側に「許可情報の変更」ボタンがあります。

↑これこれ。

こういう風にレ点して許可情報の変更ボタンをクリック。


このように設定してください。
緑チェッククリックして青←クリックで戻る。

それでreply.php

$filename = "./tmp/data.txt";

の./tmp/data.txtをdata.txtのフルパスに変更。


で、あとは
Twitterbot作り 〜リプライさせよう〜 - 銀さんのbot 〜不完全〜
に従ってやればリプライできるはず…なんだ。


それでリプライソースを記事通りに1回やってみました。
エラーが出てしまった。
それでなんやかんやした結果、tweet($massage ,$username,$password)の内容がないことに気付きました。

function tweet($massage ,$username,$password)
{
$massage =urlencode($massage);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/update.xml');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "status=$massage ");
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($ch);
curl_close($ch);
}

これをreply.phpにぶっ込んでください。
場所は$s_name=$line;の下で。
これするとエラーがなくなりました。

が、@がダブルでつくので

$massage = ereg_replace("\@$username", "", $var);

$reply_name = "@$reply_name";

$massage1 = ereg_replace("\@$username", "", $var1);

の@を消してください。


で、以下が消したソースです。

< ?php

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

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

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

//最新id
$s_name=$line;


function tweet($massage ,$username,$password)
{
$massage =urlencode($massage);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/update.xml');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "status=$massage");
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($ch);
curl_close($ch);
}



$host = "http://twitter.com/statuses/mentions.xml?count=2";


$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 = simplexml_load_string($result);



$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;


$var1 = $XML->status[1]->text;
$massage1 = ereg_replace("\$username", "", $var1);



$harahe = array("ポテトキャセロール",
"オートミールケーキ",
"チキンカレーキャセロール",
"ブラウニー",
"黒豆スープ");

$kiss=array("台詞1","台詞2","台詞3","台詞4","台詞5");


//投稿部分を整え

if(! empty($reply_name)){
if(stristr($var, "はらへ")){
$key = array_rand($harahe);
$post = $harahe[$key];
$massage ="@".$reply_name." ".$name."麻呂さん、お腹すいたんですか?うーん、では".$post."食べますか?";
}


else if(stristr($var, "ちゅっ")){
$key = array_rand($kiss);
$post = $kiss[$key];
$massage ="@".$reply_name." ".$name.$post;
}
else{
$mes=array("");
$massage = $mes;
}
}


if($dat != $s_name){
if($var != $var1){
tweet($massage ,$username,$password);
file_put_contents($filename,$dat,LOCK_EX);
}
}

?>

これでリプライできると思います。
tenkiさん、またできない時はコメントください。
8月31日と9月1日は返信できません。
返信は2日以降になります。


追記
curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/update.xml');
のところが原因で不具合が出るという報告を聞きました。
xml'←の'が日本語の’になっているのが原因でした。
半角の'に直してもらうとエラーがなくなりました。
間違ったソースを貼ってしまい、参考にして頂いた作者様にご迷惑をおかけしました。
間違っているところがあったり、ここのやりかたわかんないなどがあれば素人ながらできる限り対応したいと思うのでよろしくお願いします。