[簡易好感度リプライ]

<?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;
	}

}

?>

一覧に戻る