[リプライ]
<?php
// twitteroauth.phpを読み込む
require_once("twitteroauth.php");
$consumer_key = "";
$consumer_secret = "";
$access_token = "";
$access_token_secret = "";
//最後に返事したリプライを保存するファイル
$filename = "◯◯.txt";
$host = "https://api.twitter.com/1.1/statuses/mentions_timeline.json"; //返信一覧
$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"));
}
//json文字列をオブジェクトに代入する
$JSON = json_decode($req);
//フレンドリストのオブジェクト作成
$host = "https://api.twitter.com/1.1/friends/ids.json";
$req = $to->OAuthRequest($host,"GET",array());
$friends = json_decode($req);
$friendslist = array();
foreach($friends->ids as $item){
$friendslist[] = (String)$item;
}
//順に返信
$i = count($JSON)-1;
$j = 0;
while($i >= $j) {
$var = $JSON[$i]->text;
$com = ereg_replace("\@$username", "", $var);
$reply_name = $JSON[$i]->user->screen_name;
$name = $JSON[$i]->user->name;
$id = $JSON[$i]->id_str;
//ゴチャゴチャするので、返信のセリフ組み合わせはユーザー定義関数で。
$message = serif($reply_name,$name,$com,$id);
//そのままポストの関数へ…
if($message){
$result = $to->OAuthRequest("https://api.twitter.com/1.1/statuses/update.json","POST",array("status"=>$message,"in_reply_to_status_id"=>"$id"));
print $result;
}
$i--;
}
//最終発言リプライのidを保存してる部分。先頭を調べて…
$string = $JSON[0]->id_str;
//空じゃなかったら書き込み
if(!empty($string)){
$dat = (string)$string;
file_put_contents($filename,$dat,LOCK_EX);
}
//セリフ生成のユーザー定義関数
function serif($reply_name,$name,$com,$id){
$break_flag = false;
$today = date("Y/m/d l H:i:s");//デバッグ用の日付表示(なくてよい)
//語句のマッチを探す
if($break_flag === false){
//配列を用意して…
$oha=array("おはよう","まだ眠い…","ZZZ…");
$oya=array("おやすみ","もう寝るの?","いい夢を");
$janken=array("ぐー","ちょき","ぱー");
$oumu=array("ごめん、分からない","ごめん、もう一回言って","あ、聞いてなかった、ごめん");
//特定語句に反応する部分
if($reply_name != null){
//RTに対する返信もしないように戻り値をnullに代入
if(stristr($com, "RT")){
$return = null;
}
$reply_name = "@$reply_name";
if(preg_match("/おはよ|ハロー/u",$com)){
$key = array_rand($oha);
$post = $oha[$key];
$return = $reply_name." ".$post;
}else if(preg_match("/おやす|寝る/u",$com)){
$key = array_rand($oya);
$post = $oya[$key];
$return = $reply_name." ".$post;
}else if(preg_match("/ジャンケン|じゃんけん/u",$com)){
$key = array_rand($janken);
$post = $janken[$key];
$return = $reply_name." じゃあ".$name."、じゃんけんで勝負しよう!じゃーんけーん…".$post."!";
}else{
$key = array_rand($oumu);
$post = $oumu[$key];
$return = $reply_name." ".$post;
}
//戻り値
return $return;
}else{
//$reply_nameが空のときはnullになる
return null;
}
}
}
?>
一覧に戻る |