- 2009-06-06 (土) 21:43
- PHP
はてなブックマークから Web Hook 機能というのがリリースされました。
これははてブにブックマークしたタイミングで、設定した URL に HTTP POST を投げてくれます。
というわけで、これを使ってはてブにブックマークしたら Twitter にその内容を投稿する PHP スクリプトを書いてみました。
<?php
require_once 'HTTP/Client.php';
header('Content-type: text/plain; charset=utf-8');
// はてなブックマーク Web Hook Key
define('HB_WEBHOOK_KEY', 'your_key');
// bit.ly アカウント
define('BITLY_USERNAME', 'your_username');
define('BITLY_API_KEY', 'your_api_key');
// Twitter アカウント
define('TW_USERNAME', 'your_username');
define('TW_PASSWORD', 'your_password');
// 正しいパラメータが設定されている場合
if(urldecode($_POST['key']) == HB_WEBHOOK_KEY) {
if(isset($_POST['title'], $_POST['url'], $_POST['status'], $_POST['comment'])) {
// ブックマークを追加した場合のみ
if($_POST['status'] == 'add') {
// パラメータをデコードする
$title = mb_convert_encoding(urldecode($_POST['title']), 'UTF-8', 'auto');
$url = urldecode($_POST['url']);
$comment = preg_replace('/\[.+\]/', '', mb_convert_encoding(urldecode($_POST['comment']), 'UTF-8', 'auto'));
// URL を bit.ly で短縮する
$client =& new HTTP_Client();
$http_status = $client->get('http://api.bit.ly/shorten?version=2.0.1&login='.BITLY_USERNAME.'&apiKey='.BITLY_API_KEY.'&longUrl='.$url);
if($http_status == 200) {
$response = $client->currentResponse();
$result = mb_convert_encoding($response['body'], 'UTF-8', 'auto');
$json = json_decode($result, true);
if($json['statusCode'] == 'OK') {
$url = $json['results'][$url]['shortUrl'];
}
}
$status = "[B!] $title $url $comment";
// Twitter に投稿する
$client =& new HTTP_Client(null, array('Authorization' => 'Basic '.base64_encode(TW_USERNAME.':'.TW_PASSWORD)));
$http_status = $client->post('http://twitter.com/statuses/update.xml', array('status' => $status));
if($http_status == 200) {
print('success.');
} else {
print('error. status='.$http_status);
}
}
} else {
header('HTTP', true, 400);
}
} else {
header('HTTP', true, 401);
}
?>
改変などはご自由にどうぞ。
せっかくなので Twitter の OAuth に対応させてみようかと思いましたが、途中でめんどくさくなりましたw
(追記@20090607)
140 文字以内に収まるように、bit.ly で短縮 URL にしてから投稿するようにしました。
関連する記事
- Newer: iPhone Ad hoc ビルドの配布手順
- Older: Coda + Subversion でソース管理

