Tidy関数を使ったスクレイピングとTwitterAPI(2)-TwitterAPI::update

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、感慨深いです。
一年ぶりにソースを見直したら、改善できそうなところが・・・・
そこに成長を感じたりもします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください