はてなブックマークエントリー情報取得APIははてなスクリーンショットAPI(でもある)

はてなブックマークエントリー情報取得APIは任意のURLに対するブックマークを返してくれるAPIなだけでなく、事実上はてなスクリーンショットのAPIとしても機能している。正確には、はてなスクリーンショットによるスクリーンショット画像のURLも返してくれるというだけ話なのだけど。

例としてlabs.hail2u.net/hatena/screenshot/を作成してみた。ここでは、

var sites = [
  'http://hail2u.net/blog/',
  'http://la.ma.la/blog/',
  'http://lowreal.net/blog/',
  'http://tokyoenvious.xrea.jp/b/'
];

というURLの配列から、

<p><img
  src="http://screenshot.hatena.ne.jp/images/120x90/0/1/6/3/8/3c63fbe3a76655390497a260a44ec509d2f.jpg"
  height="90"
  width="120" /></p>
<p><img
  src="http://screenshot.hatena.ne.jp/images/120x90/7/4/2/d/6/b497e3edc6d9badd41bac03419b4822e758.jpg"
  height="90"
  width="120" /></p>
<p><img
  src="http://screenshot.hatena.ne.jp/images/120x90/notfound.jpg"
  height="90"
  width="120" /></p>
<p><img
  src="http://screenshot.hatena.ne.jp/images/120x90/9/d/d/0/0/0992b943b07310949f8428ce82472381659.jpg"
  height="90"
  width="120" /></p>

というHTMLを生成することができている。

APIへのリクエストは動的にスクリプト要素を生成してやる例のアレをベースにしたもので、まららんはてのくんが書いたりしてたのを参考にまたちょっと手が入っている(ソースを参照)。APIのリクエストを除いたスクリーンショットのURLを拾うコードは正味一行。

var ss = (bookmarkData == null) ? 'http://screenshot.hatena.ne.jp/images/120x90/notfound.jpg' : bookmarkData.screenshot;

はてなブックマークエントリー情報取得APIが迅速にレスポンスを返してくれるので、想像していたよりも軽快にHTMLが生成できた。もちろんスクリーンショットが欲しいURLがブックマークされている数が多ければそれだけレスポンスが遅くなるので、HTMLの生成も重くなるのだろうだけど。

ブックマークされていないとスクリーンショットのURLを取得することが絶対にできないことなどいわゆるサムネイル取得APIと比較して劣るところはあるけれども、スクリーンショット取得APIとしてそこそこ使えるのではないかと思う。

また、Perlではてなブックマークエントリー情報取得APIを利用したスクリーンショット画像へのリダイレクタとかも作った。これはスクリーンショットがあった場合はそのURLにリダイレクトという仕組みになっているので、

<img src="http://example.com/hatena_screenshot_redirector.cgi?url=http%3A%2F%2Fexample.org%2F" />

みたいに使うことができる。とりあえずリダイレクトさせることだけを目標に作った短いものなので、キャッシュ作らないで常にはてなにGETかけるとかヒドイCGI。使う人はちゃんと作り直してください。愛するはてなのために!