TwitterのRepliesをゆっくり読み上げてみた
最近人気の生首がゆっくり喋るやつです。会社の人がPOSTされた文章を読み上げて社内に流すものを作っていたので僕もやってみました。Twitterの新着Repliesを読み上げます。Ust使ってデモをやったんですが録画忘れてました。動画なくてすいません。
読み上げにはSofTalkというソフトを使います。単純にこれをPHPのexec()で叩くだけです。WindowsのソフトなのでWindowsじゃないと動きません。wineだとエラーが出て使えませんでした。
問題はexecを使うので、任意のコマンド実行されかねないことです。Windowsのコマンドプロンプトで複数コマンドを実行する方法はちょっと知らないのですが(Linuxなら;で区切る)、実行されたら困るだろうということでエスケープします。とはいえWindowsだと何をエスケープしていいのか分からないのでとりあえず全部全角に変換しておきました。誰か正しい方法教えてください。
PHPのコードを載せておきます。掲載用にかなり削ったのでこのままじゃ使えませんよ。ちゃんとsleepとか入れてください。
あとWindowsのコマンドを叩くのでShiftJISで書いた方がいいです。APIの結果はUTF8で返ってくるのでShiftJISに変換しないとわけのわからないものを読み上げます。
<?php require_once('HTTP/Client.php'); $httpClient = new HTTP_Client(NULL, array('Authorization'=>'Basic '.base64_encode($user.':'.$password))); $latest_id = 0; while(1) { $since_id = ($latest_id==0) ? '' : '?since_id='.$latest_id; $status_code = $httpClient->get('http://twitter.com/statuses/replies.xml'.$since_id); $response = $httpClient->currentResponse(); if($status_code!='200') continue; $xml = simplexml_load_string($response['body']); for($i=count($xml->status)-1;$i>=0;$i--) { if($latest_id>$xml->status[$i]->id) continue; $latest_id = $xml->status[$i]->id; $message = $xml->status[$i]->user->screen_name.' '.$xml->status[$i]->text; $message = mb_convert_encoding($message, 'SJIS', 'UTF-8,SJIS,EUC-JP'); yukkuri_shaberuyo($message); } } function yukkuri_shaberuyo($message) { $message = mb_convert_kana($message, 'RNASKV', 'Shift_JIS'); exec('C:\softalk\SofTalk.exe "/W:'.$message.'"'); // "のエスケープ忘れてるねこれ↑ } ?>