[簡易好感度リプライ]<?php // twitteroauth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください require_once("twitteroauth.php"); $consumer_key = ""; $consumer_secret = ""; $access_token = ""; $access_token_secret = ""; //最後に返事したリプライを保存するファイル $filename = "◯◯.txt"; //好感度リストのパス $lovefile = "lovefile.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; $twitterid = $JSON[$i]->user->id; $name = $JSON[$i]->user->name; $id = $JSON[$i]->id_str; //ゴチャゴチャするので、返信のセリフ組み合わせはユーザー定義関数で。 $message = serif($reply_name,$name,$com,$id,$lovefile,$twitterid); //そのままポストの関数へ… 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,$lovefile,$twitterid){ //語句のマッチを探す //配列を用意して… $oha=array("おはよう","まだ眠い…","ZZZ…"); $oya=array("おやすみ","もう寝るの?","いい夢を"); $testloveup=array("は、はずかしい…","あ、うん、ありがと","うれしい"); $testlove=array("あーはいはい…","はは…","うん、ありがと"); $testlovehigh=array("ぎゅー","えへへ"); $oumu=array("ごめん、分からない","ごめん、もう一回言って","あ、聞いてなかった、ごめん"); $love = 0; //好感度フラグデフォルト値 $lovetrue = 0; //好感度上昇フラグデフォルト値 $lovelist = file($lovefile); //好感度をファイルから変数に代入 foreach($lovelist as $loveid){ //リストを1つずつ展開 $loveid = trim($loveid); if( $loveid == $twitterid ){ //展開しているリストとPOSTしたユーザIDが一致すれば処理に移る $love = 1; //リストに処理中ユーザが居たので好感度フラグを立てる } } //特定語句に反応する部分 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("/テスト/",$com)){ //好感度が上がるかもしれないワード処理 $key = array_rand($testlove); $post = $testlove[$key]; $return = $reply_name." ".$post; if( $love == 1 ){ //好感度フラグが立ってれば処理に移る $key = array_rand($testlovehigh); $post = $testlovehigh[$key]; $return = $reply_name." ".$post; }else{ $loverand = mt_rand (0,5); //0〜5の乱数を作成 if( $loverand == 1 ){ //乱数が1だったら実行 $lovetrue = 1; //好感度が上がるフラグを立てる $key = array_rand($testloveup); $post = $testloveup[$key]; $return = $reply_name." ".$post; } } }else 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{ $key = array_rand($oumu); $post = $oumu[$key]; $return = $reply_name." ".$post; } //何かしら反応できるPOSTがあればここから先に進む if( $lovetrue == 1 ){ //好感度上昇フラグが立っていれば処理に移る $lovelist = file($lovefile); //好感度をファイルから変数に代入 $lovefh = fopen("$lovefile","w+"); //好感度ファイルを上書きモードで開く fwrite($lovefh,""); //一旦好感度ファイルの中身を空にする $lovefh = fopen("$lovefile","a+"); //好感度ファイルを追加書き込みモードで開く foreach($lovelist as $loveid){ //リストを1つずつ展開 if( $twitterid == $loveid ){ //展開しているリストとPOSTしたユーザIDが一致すれば処理に移る }else{ //POSTしたユーザじゃなかったら処理に移る fwrite($lovefh,"$loveid"); //書き込みなおす } } //ループ処理終了 fwrite($lovefh,"$twitterid\n"); //改めて現在処理中のユーザIDを好感度リストに追加 } //戻り値 return $return; }else{ //$reply_nameが空のときはnullになる return null; } } ?> 一覧に戻る |