PHPでTwitterのBotを作ってみた(4)

実は、カニもモモンガもユウも同一人物です。

さて、ユウです。
今回はお気に入りの取得と書いたのですが、
昨日興味深い記事を見つけましたので、それについてです。

追記:現在のTwitter APIの最新バージョンはv1.1です。
記事記載当時と多少異なっている部分がありますのでご注意ください。
気が向いたら最新版のやつ書きます!

プログラミングができなくても作れるTwitter botの作り方
このサイトなのですが、簡単にBotが作れるよ。っていう内容で
パッケージ化してるのでちょこちょこっと内容いじればBotが出来ちゃうお手軽さです。

※有名じゃん!知らなかったの!?とかツッコミは無しでお願いね。…Botに興味持ったの最近なので。

このソースを見させて頂いて思ったのですが、多重リプライ防止するだけならデータベース使わなくていいじゃん!ってことです。
単純に考えたらcronで実行する間隔より前の分はリプライ飛ばさなくていいわけですし、
それ以外にも、つぶやきのIDをどっかのファイルにメモっておいて、そのID出てきたら処理中止でも出来るじゃん!笑
っていう。。。

あー恥ずかしい。
というわけで、時間チェックはこんな感じ?

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

//cron実行間隔(1 hourも可能)
$cron_time = "1 min";
//Botのアカウント名
$bot_name = "RTkawase_bot";
//自分宛ツイート取得数(一度の最大リプライ数)
$rpp = 5;

//アプリの情報
// Consumer keyの値
$consumer_key = "***************";
// Consumer secretの値
$consumer_secret = "***************";

//botの情報
// Access Tokenの値
$access_token = "***************";
// Access Token Secretの値
$access_token_secret = "***************";

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

$json_url = "http://search.twitter.com/search.json?callback=&q=to:" .$bot_name ."&rpp=" .$rpp;
$tw_data = get_json($json_url);
if(!$tw_data){
	echo "読み込みでエラーが発生しました。<br />\n";
	exit;
}
$search_result = $tw_data['results'];
foreach($search_result as $val){
	//ユーザーのID
	$user_name = $val["from_user"];
	//つぶやきのID
	$tweet_id = $key["id_str"];
	//Tweetタイムスタンプ
	$tweet_time_stamp = strtotime($val['created_at']);
	
	//現在日時
	$now_date = date("Y-m-d H:i:s");
	//現在日時+cron実行間隔
	$hikaku_time = strtotime($now_date ." -" .$cron_time);
	
	//つぶやきの時間が前回cron実行時より後かどうかチェック
	if($tweet_time_stamp > $hikaku_time){
		//後ならリプライ処理
		// TwitterへPOSTする。パラメーターは配列に格納する
		$req2 = $to->OAuthRequest(
			"http://api.twitter.com/1/statuses/update.xml",
			"POST",
			array("status"=>"@" .$user_name ." りぷらいだよー",
			"in_reply_to_status_id"=>$tweet_id));
	}else{
		//実行しない
	}	
}

毎回書いててあれだけど一応。。。
function get_json()はこんな感じ

//jsonの取得(返り値は連想配列形式)
function get_json($url){
	$json_data = wbsRequest2('GET',$url);
	if ($json_data){
		//連想配列でデータを返す
		$data = json_decode($json_data, true);
		return $data;
	}else{
		return false;
	}
}

function wbsRequest2($method, $url, $params = array()){
	$data = http_build_query($params);
	if($method == 'GET') {
		$url = ($data != '')?$url.'?'.$data:$url;
	}
	$ch = curl_init($url);
	
	if($method == 'POST'){
		curl_setopt($ch,CURLOPT_POST,1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
	}
	
	//curl_setopt($ch, CURLOPT_HEADER,true); //header情報も一緒に欲しい場合
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($ch, CURLOPT_TIMEOUT, 2);
	$res = curl_exec($ch);
	
	//ステータスをチェック
	$respons = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	if(preg_match("/^(404|403|500)$/",$respons)){
		return false;
	}
	
	mb_language("Japanese");
	//エンコードをUTF-8へ
	$res = mb_convert_encoding($res, "utf-8", "auto");
	
	return $res;
}

データベース使わなくなればぐっと楽になる気がします。

そして次回はお気に入り。
絶対やります!笑

  1. コメント 0

  1. トラックバック 0

return top