2011年最後の工作物 (メンション受け取ったらメールする何か)

秋月電子にて緑色の7segLEDを購入したので、Twitterの未読Mentionの数をカウントする電子工作をしようと思ったら、7segLEDのデコードICが壊れていた!ので、急遽方針変更して、アプリ側で攻めることにしました。
お題→Twitterのmentionを取得してメールで転送する

PHPdisな雰囲気もちらほらありますが、まぁ気にしない方向性で...
split関数がオワコンになってたのは少し腹たったけど。

<?php
// twitteroauth.phpを読み込む
require_once("twitteroauth.php");


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

// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
//Replay取得
$req = $to->OAuthRequest("http://api.twitter.com/1/statuses/mentions.xml","GET",array("count"=>"10"));
// XML文字列をオブジェクトに代入する
$xml = simplexml_load_string($req);
$id_array = array();
foreach($xml->status as $status) $id_array[] = $status;

$now_id = $id_array[0]->id;

if (($fp = @fopen("save.txt", "r"))== false ){
	echo "File Error!";
}else{
	
	$line = fgets($fp);
	$tmp = explode("\n", $line);
	$old_id = $tmp[0];
	
	fclose($fp);
}

echo "now=[".$now_id."] old=[".$old_id."]\n";

if($now_id != $old_id){

	echo "Mention Detected!\n";

	$status_id = $id_array[0]->id;		// 呟きのステータスID
    $text = $id_array[0]->text;			// 呟き
    $user_id = $id_array[0]->user->id;	// ユーザーナンバー
    $screen_name = $id_array[0]->user->screen_name; // ユーザーID(いわゆる普通のTwitterのID)
    $name = $id_array[0]->user->name;	// ユーザーの名前(HNなど)

	/* Send Mail */
	$to      = "送信先のメールアドレス";
	$subject = "[Twitter] Mention Received!";
	$message = "$name ($screen_name)\n$text";
	$message = mb_convert_encoding($message, "SJIS", "auto");
	$headers = 'From: hogehoge@hogehoge.com' . "\r\n" .
    'Reply-To: hogehoge@hogehoge.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

	mail($to, $subject, $message, $headers);
	
}

if (($fp = @fopen("save.txt", "w"))== false ){
	echo "File Error!";
}else{
	fputs($fp,$now_id."\n");
	fclose($fp);
}

?>

プログラムの流れは、呼び出された時に@mentionを拾い、save.txtに保存されている最後に受信したツイートIDと比較して、異なっていたらメールを送信... という感じです。で、最後にsave.txtに一番新しいメンションのIDを保存。

サーバー上に適当に配置して、cronで定期的に呼び出してあげれば、それっぽい動作になるとおもいます。各自の環境にあわせて適当にご改造ください。雑なプログラムですいません。

※セキュリティー的な配慮は特にしてないです。自己責任でお使いください
※twitteroauth.phpが必要です。

参考元:http://www.sdn-project.net/labo/oauth.html