はてなブックマークには、Web Hook といって、アイテムを追加したときなどに自動で HTTP リクエストを発行する機能がある。この機能を利用すると、はてなブックマークでの操作に別のプログラムを連動させることができる。ここでは、はてブへの新規投稿を受けてその内容をはてなハイクへも投稿する PHP スクリプト(のサンプル)を紹介する。


サンプルスクリプト「b2hooker.php」

<?php
$hatenaid = 'Hatena';
$postaddress = 'hxaytzexny';
$key = '1234567890';
$source = 'b2hooker';
$post_url = 'http://h.hatena.ne.jp/api/statuses/update.json';
?>
<?php
if (!is_array($_POST) || $_POST['key'] != $key || $_POST['status'] != 'add'){
	echo 'Error: Bad POST Request.';
	exit();
}
?>
<?php
function haikuPost($st, $kw, $id, $pw, $src, $url){
	require_once 'HTTP/Request.php';
	$req = &new HTTP_Request();
	$req->setURL($url);
	$req->setBasicAuth($id, $pw);
	$req->setMethod(HTTP_REQUEST_METHOD_POST);
	$req->addPostData('keyword', $kw);
	$req->addPostData('status', $st);
	$req->addPostData('source', $src);
	$req->sendRequest();
	return $req->getResponseBody();
}
?>
<?php
if (preg_match("/^(\[)([^]]+)(\]).*/u", $_POST['comment'])){
  $haikukw = preg_replace("/^(\[)([^]]+)(\]).*/u", "\${2}", $_POST['comment']);
}
$comment = preg_replace("/(\[)([^]]+)(\])/u", "[[\${2}]] ", $_POST['comment']);
$h_status = "[B!] {$_POST['title']} \n{$_POST['url']} \n{$comment}";
$result = haikuPost($h_status, $haikukw, $hatenaid, $postaddress, $source, $post_url);
echo $result;
?>

このスクリプトがすること

  1. はてブ Web Hook からの POST リクエストを受け取る。
  2. POST リクエストが妥当なものか確認する。
  3. ブックマークコメントにタグがある場合、最初のものをハイクのキーワードにする。
  4. コメント中のタグをハイクのキーワードリンク形式にする。
  5. はてなハイクへ投稿する。

使い方

このスクリプトはファイル名が「b2hooker.php」だとする(とりあえずはなんでもいいが…)。b2hooker.php をウェブサーバ「example.com」上の「/directory」に設置する場合、これの URL は「http://example.com/directory/b2hooker.php」となる。設置するウェブサーバには PHP 実行環境と PEAR の HTTP_Request モジュールが必要。

  1. 自分のはてブの設定/外部サイト連携/Web Hook の欄に必要な設定を行う。
    • 「イベント通知を行う URL」に b2hooker.php の URL を入れる(上記参照)。
    • 「キー」を自動生成し、クリップボードなどにコピーしておく。
    • 「受け取るイベントの種類」は「ブックマークの追加/更新/削除」を選択。
  2. b2hooker.php の冒頭部分を書き換えて書く変数に適切な値を設定する。
    • $hatenaid に自分のはてな ID を入れる。
    • $postaddress にはてなの設定で取得できる投稿用アドレスの @ より前の部分を入れる。
    • $key に前述の「キー」を入れる。
  3. b2hooker.php をウェブサーバの公開ディレクトリにアップロードする。

これではてなブでブックマークを追加したときに、はてなハイクにも投稿される(はず)。

解説

このサンプルは見やすいように四つの<?php ~ ?>に分けているので、各節ごとに説明する。

  1. 最初の節は先述の通り、はてな ID の指定など環境設定を行っている。
  2. 二番目の節は、HTTP リクエストの内容を検査し、処理すべきものでなければ実行を終了させる。
  3. 三番目の節は、はてなハイクに投稿するための処理を関数として定義している。このサンプルではこの処理を関数にする必要はないが、共通の処理で投稿可能な別のミニブログなどへも投稿するなど、スクリプトを拡張する場合、ここを関数にしておくと便利(なこともある)。
  4. 最後の節では、はてブからの POST リクエストの内容を処理し、第三節で定義した関数を呼び出して実際の投稿処理を行っている。最後の行では、はてなハイク API からの応答を出力している(特に意味はない…)。

注意

このサンプルでは投稿用アドレスや「キー」をスクリプトファイルに直接書き込むので、実際に使ってみる場合は第三者にファイル自体を見られないように注意すること。