はてなブックマークWeb Hookに触ってみる

はてなブックマークTwitter投稿スクリプトをのんびりと製作している間に、こんなの欲しいと思っていた機能がリリースされていました。

はてなブックマーク Web Hookとは - はてなキーワード

RSSの場合、一定時間ごとにスクリプト側から更新を見に行く必要があるのと、スクリプトから呼び出し頻度が1回/30分に制限されている (はてなブックマークの場合) ので、今ひとつ使い勝手が悪い。自分がブックマークしたタイミングで、はてなブックマークから呼び出してくれればいいのにと思っていました。

はてなブックマークWeb Hook」はまさにそういう機能のようなので、早速ちょろっと試してみました。

ブックマークエントリ追加時に呼び出されるCGIスクリプト

はてなブックマークWeb Hook」では、ブックマークエントリ追加時に、自分が指定したURLを呼び出すという仕組みになっています。Perlで書かれたサンプルがありますが、ここはRubyで書いてみます。

とりあえずは、呼び出し側から受け取ったパラメータをログファイルに保存するだけ。
webhook-test.cgi:

#!/usr/bin/ruby -Ku

require 'cgi'

cgi = CGI.new

open("/tmp/webhook-log.txt", "a") {|f|
  f.puts
  f.puts "username: #{cgi['username']}"
  f.puts "url: #{cgi['url']}"
  f.puts "count: #{cgi['count']}"
  f.puts "status: #{cgi['status']}"
  f.puts "comment: #{cgi['comment']}"
  f.puts "timestamp: #{cgi['timestampe']}"
  f.puts "is_private: #{cgi['is_private']}"
  f.puts "key: #{cgi['key']}"
}

cgi.out("text/plain") { "ok\n" }

CGIスクリプトの設置

次に、作成したCGIスクリプトを、Webからアクセス可能な場所に設置します。
今回は、Linode.comから借りているVPS上に設置しました。

はてなブックマーク側の設定

はてなにログインした状態で、はてなブックマークトップ→設定→データ管理で、Web Hookの欄に、CGIスクリプトの設置先であるURLと、認証のためのキーを指定します。
キーは自動生成することもできます。

実行

以上の準備が整ったら、適当なページをブックマークします。

その結果、以下のようにログファイルにブックマークエントリの情報が追加されていることが確認できました。

username: m-kawato
url: http://www.amazon.co.jp/gp/product/4774138975
count: 36
status: add
comment: [book]
timestamp:
is_private: 0
key: <キー>

ここでkeyパラメータの値は、はてなブックマークの設定画面で入力したものと同一です。

今後

今回使ってみたWeb Hookを利用して、自分がはてなブックマークに登録した新着エントリを即座にTwitterに投稿するスクリプトを製作し、実際に運用してみます。