Twitterに投稿をpostしたり、タイムラインを取得したりすることができるTwitterAPI。
(仕様日本語訳:[観] Twitter API 仕様書 (勝手に日本語訳シリーズ))
PHPでTwitterAPIを使用できるPEARライブラリもあるのだけど(Services_Twitter)
勉強を兼ねて自分でクラスを作成してみました。
今後、タイムライン取得や、返信取得も必要に応じて増やしていく予定。
TwitterAPI::updateを呼び出す
PEARライブラリのHTTPRequestを使用しています。
主な流れは
●引数として渡されたID・PASSWORDでBASIC認証を行う
●POSTデータに投稿内容をセット
●URL( http://twitter.com/statuses/update.xml )にPOSTを使用したHTTPリクエスト送信
●レスポンスコードとして200が返ってくれば投稿成功
となります。
//TwitterAPI.class.php class TwitterAPI { // ########## TwitterにPOSTする public function update( $status , $id , $pass ) { require_once "HTTP/Request.php"; $api_url = "http://twitter.com/statuses/update.xml"; $req = new HTTP_Request($api_url); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->setBasicAuth($id, $pass); $req->addPostData("status" , $status ); if(!PEAR::isError( $req->sendRequest())){ return $req->getResponseCode(); } else { return false; } } }
[プロキシを介してインターネットに接続している場合]
以下のようにして、プロキシ設定を追加します。
$req = new HTTP_Request($api_url); //...(略) $req->setProxy("your_proxy", 8888); //...(略) if(!PEAR::isError( $req->sendRequest())){ ....
TwitterAPIクラス使用方法
自作したTwitterAPIクラスは以下のようにして使用します。
IDとパスワードは呼び出し時に自由に設定できるようにしてあります。
// オブジェクト生成 $tap = new TwitterAPI(); $status = "投稿内容文字列"; $tap->update( $status , ID , PASS );
札幌市 水道凍結情報( http://twitter.com/sap_freezer )
いままで作成したクラスを組み合わせて、TwitterBotを作成しました。
Twitter / sap_freezer
メイン実行クラスは以下のようになっています。
#!/usr/local/php5/bin/php <php? // 水道情報局のURL define('INIT_URL' , "http://www.sweb.co.jp/tenki/cgi/freeze.cgi"); // twitter API POST define('ID' , "twitterID"); define('PASS' , "twitterPassWord"); require_once "GetHttpSource.class.php"; require_once "Scraping.class.php"; require_once "TwitterAPI.class.php"; // HTMLの取得 $ca = new GetHttpSource(); $data = $ca->get_html(INIT_URL); // Tidy関数config $config = array('indent' => TRUE, 'output-xhtml' => TRUE, 'wrap' => 200); // 取得したHTMLファイルの内容をUTF-8の文字コードで$configで指定した設定で、tidyオブジェクトを作成 $tidy = tidy_parse_string($data, $config, 'UTF8'); // cleanRepairで整形 $tidy->cleanRepair(); // スクレイピング処理 $scr = new Scraping(); $result_array = $scr->scraping_data($tidy->body()); $result_date = $scr->scraping_date_data($tidy->body()); // UPDATEする $tap = new TwitterAPI(); foreach( $result_array as $area_r ){ $status = "[".$area_r["center"]."::水道凍結情報] 今夜は【".$area_r["sfont1"]."】です。明日は【".$area_r["sfont2"]."】です。(".$result_date.")".INIT_URL; if( $result = !$tap->update( $status , ID , PASS ) ){ echo"APIエラー"; } else { echo $result ." " ; echo $status ; } } ?>
はじめて作ったTwitterのBOT、感慨深いです。
一年ぶりにソースを見直したら、改善できそうなところが・・・・
そこに成長を感じたりもします。