ネットサービスとかGoogleとか豆知識とか。

Index > プログラミング > はてなブックマークのASIN被コレクション件数を取得してJSONPで返す
プログラミング
2006年10月12日 01:41

はてなブックマークのASIN被コレクション件数を取得してJSONPで返す

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

はてなブックマーク件数取得APIとは - はてなダイアリーに載っているサンプルを参考にして、任意のASINコードから被コレクション件数を取得してJSONP形式で返すプログラムを作ってみました。

ASINコードはピリオド区切りでasin=1234567890.2345678901のように与えます。さらにcallback=funcnameと与えると、funcname({"1234567890":1, "2345678901":2});のようなJSONP形式で結果を返します。callbackを与えない場合は、JSON形式で返します。

エントリーページに掲載しているAmazon関連商品リストのところで、このプログラムを実際に使い、被コレクション件数を取得して表示されています。

#!/usr/local/bin/perl

use strict;
use warnings;
use XMLRPC::Lite;
use CGI;

my $p = new CGI();

my $asins = $p->param('asin');
my $callback = $p->param('callback');

my @asin = split(/\./, $asins);

print "Content-type:text/plain\n\n";

map { if (!/^[0-9a-z]{10}$/i) { print "error"; die; } } @asin;
if ($callback !~ /^[a-zA-Z0-9\.\_]*$/) { print "error"; die; }

my $map = XMLRPC::Lite
        ->proxy('http://b.hatena.ne.jp/xmlrpc')
        ->call('bookmark.getAsinCount', @asin)
        ->result;

my @json = map { "\"$_\":$map->{$_}" } @asin;

if ($callback) {
 print $callback . '({' . join(",", @json) . '});';
} else {
 print '{' . join(",", @json) . '}';
}