OAuthで返信するbotを作ってみる

はい。ついめ〜じが一段落しましたので(まだ根本的解決には至っていませんがひとまず)
お待ちかねのOAuth対応botですよ!

OAuthなんてかったるくていちからプログラミングなんてしてられない!ので、他の方のスクリプトや文書を使わせていただきましょう!

http://wolf.silk.to/labo/oauth.html

ほぼ、こちらを参考にさせていただきました。

■実際にPHP+OAuthでTwitterにPOSTする

が、出来ましたか?
できたらcurlで作っていた今までのスクリプトを少し変えるだけでOAuthでも動くようになります。

<?php

// twitteroauth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください
require_once("twitteroauth.php");

// Consumer keyの値
$consumer_key = "";
// Consumer secretの値
$consumer_secret = "";
// Access Tokenの値
$access_token = "";
// Access Token Secretの値
$access_token_secret = "";

//最終発言をとっておくテキスト。書き込み可に
$filename = "./tmp/data.txt";

$host = "http://twitter.com/statuses/mentions.xml"; //返信一覧

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

// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);


//保存しておいたステータスid取得。このid以降の返信を読み込む。なかったり読み込めなかったら最新1件

if(!empty($line)){
$req = $to->OAuthRequest($host,"GET",array("since_id"=>$line));
}
else{
    $req = $to->OAuthRequest($host,"GET",array("count"=>"1"));
    }


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


//順に返信
$i = count($XML)-1;
$j = 0;
 while($i >= $j) {
$var =  $XML->status[$i]->text;
$com = ereg_replace("\@$username", "", $var);
$reply_name = $XML->status[$i]->user->screen_name;
$name = $XML->status[$i]->user->name;

//ゴチャゴチャするので、返信のセリフ組み合わせはユーザー定義関数で。
$message = serif($reply_name,$name,$com);

//そのままポストの関数へ…

$result = $to->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=>$message));
print $result;//この行はなくてもいい。確認用
$i--;
}

//最終発言リプライのidを保存してる部分。先頭を調べて…
$string = $XML->status[0]->id;
//空じゃなかったら書き込み
if(!empty($string)){
$dat = (string)$string;
file_put_contents($filename,$dat,LOCK_EX);
}
//これでメインの処理は終わり


//セリフ生成のユーザー定義関数
function serif($reply_name,$name,$com){
//配列を用意して…
$uranai=array("大吉","中吉","小吉","末吉","","");
$janken=array("ぐー","ちょき","ぱー"); 
//スクリーンネームに@を付ける
$reply_name = "@$reply_name";
//特定語句に反応する部分
if(stristr($com, "占い")){
     $key = array_rand($uranai);
    $post = $uranai[$key];
    $return = $reply_name." ".$name."さんの運勢…".$post;
    }
    else if(stristr($com, "じゃんけん")){
         $key = array_rand($janken);
    $post = $janken[$key];
    $return = $reply_name." ".$name."さん、勝負だ!じゃんけん…".$post;
}
else{
    //このままだと鸚鵡返し。色々工夫してみて下さい
    $return = $reply_name." ".$com;
}
//戻り値
return $return;
}


カスタマーキーや、トークンさえわかってしまえば、あとは便利なライブラリがあるので簡単ですね。
アイコン変えるのはどうだろう、難しいのかな。

とりあえず今日はこれで