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で定期的に呼び出してあげれば、それっぽい動作になるとおもいます。各自の環境にあわせて適当にご改造ください。雑なプログラムですいません。