公開と同時につぶやくよ(TwitterAPI叩いてみた)
Posted: Updated:
注意! この記事の内容は、2010年のTwitterAPIのBasic認証廃止に伴い、現在利用できません
POSTモジュールの例
スーパー地味どころか使い所無いですが、エントリーを公開するついでにツイート(笑)するPOSTモジュールを書いてみました。いや、深夜に隣の部屋が盛り上がり始めて睡眠妨害されたもんで、つい。
拡張機能の開発 | a-blog cms - Web制作者のためのCMS のような、開発系の情報もちょろっと出始めているの小出ししてみる次第。
処理の順序
- タイトルとリンクを取得して、Tweet文字列を作成
- TinyURLにリンクを投げて短縮
- TwitterAPIを、PEARのHTTP_Requestで叩く
- 本来のエントリー公開処理
PHPを準備する
下のコードを、/php/ACMS/POST/Entry/OpenTweet.phpとして作成します。IDとパスワードは、ぼちぼち書き換えてください。
<?php require_once ACMS_LIB_DIR.'POST/Entry/Open.php'; class ACMS_POST_Entry_OpenTweet extends ACMS_POST_Entry_Open { function post() { $twitId = 'あなたのID'; $twitPw = 'あなたのパスワード'; $bid = $_POST['bid']; $cid = $_POST['cid']; $eid = $_POST['eid']; /** * 遠回しにエントリータイトルを取得します。 * submitする時点で{entry_title}とかの変数を忍ばせて送った方が良いです。 * テンプレートの編集を手抜くために今回はこれで。 */ $DB = DB::singleton(dsn()); $SQL = SQL::newSelect('entry'); $SQL->addSelect('entry_title'); $SQL->addWhereOpr('entry_blog_id', $bid); $SQL->addWhereOpr('entry_id', $eid); $title = $DB->query($SQL->get(dsn()), 'one'); /** * リンクを組み立てて更にtinyUrlに投げて短縮します。 */ $url = acmsLink(array('bid'=>$bid, 'cid'=>$cid, 'eid'=>$eid)); $tiny = file_get_contents('http://tinyurl.com/api-create.php?url='.$url); $tweet = "NewEntry! $title - $tiny"; //die($tweet); // ここで結果を確認しても良いけど、とりあえず無視。 $res = $this->entryTweet($twitId, $twitPw, $tweet); // 親のpostメソッドを起動して公開処理に戻る。 return parent::post(); } function entryTweet($id, $pw, $tweet) { $param = '?status='.rawurlencode($tweet); require_once LIB_DIR.'PEAR/HTTP/Request.php'; $REQ = new HTTP_Request('http://twitter.com/statuses/update.xml'.$param); $REQ->setMethod(HTTP_REQUEST_METHOD_POST); $REQ->setBasicAuth($id, $pw); $res = $REQ->sendRequest(); if ( !PEAR::isError($res) ) { return $REQ->getResponseBody(); } else { return false; } } } ?>
設置方法
/themes/system/entry/action.htmlを編集します。本来のACMS_POST_Entry_OpenモジュールをOpenTweetにしちゃってください。
<!-- ▼これを --> <input type="submit" name="ACMS_POST_Entry_Open" value="公開" /> <!-- ▼こんな感じに --> <input type="submit" name="ACMS_POST_Entry_OpenTweet" value="公開してつぶやく" />
使用方法
いきなりエントリーを公開しちゃうと、このモジュールの出番がありません。既に作成してある非公開エントリーを、先ほど用意した"公開してつぶやく"ボタンで公開してください。
継承してオーバーライド
これが何のサンプルかと言いますと、a-blog cmsのプログラムは現状すべてionCubeで暗号化されているため、既存の処理に割り込む余地が無いようにみえます。
PHP4対応だからこその荒技ですが、継承してメソッド上書きすれば、かなり部分で乗っ取りが可能です。追加したい処理を挟んだ上で、最後にきっちりparnet::post()してあげれば親のpostメソッドが起動して、本来の処理もきちんと完了します。
ファイルの配置とクラス名が対応しているので、素直に元のファイルを読んで、素直に継承するクラスを指定すれば大抵OKです。
物好きさんがいらっしゃいましたら、ぜひハックしてみてください。