公開と同時につぶやくよ(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です。
物好きさんがいらっしゃいましたら、ぜひハックしてみてください。