はてなブックマークのASIN被コレクション件数を取得してJSONPで返す
はてなブックマーク件数取得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) . '}';
}
コメントを残す