PerlでAmazon Product Advertising APIのBrowseNodeLookupを行なうの楽天版です。Amazon Product Advertising APIはRESTしかないのですが、楽天ウェブサービスはRESTとJSONに対応しているので、今回はJSONを使ってみます。
(ファイル名はsample_books_genre_search.pl)
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
use JSON::Syck qw(Load);
use LWP::UserAgent;
use URI;
my $uri = URI->new('http://api.rakuten.co.jp/rws/2.0/json');
$uri->query_form(
developerId => 'Your Developer ID',
operation => 'BooksGenreSearch',
version => '2009-03-26',
booksGenreId => shift || '000',
);
my $ua = LWP::UserAgent->new;
$Data::Dumper::Indent = 1;
if ($res->is_success) {
print Dumper(Load($res->content)->{Body}), "n";
} else {
print $res->status_line, $res->as_string, "n";
}
$ perl sample_books_genre_search.pl 000
と実行すると、以下のような結果が得られます。引数の"000"はルートのジャンルIDです。これを"001"のようにすると、"本"のジャンルの子ジャンルが取れます。
$VAR1 = {
'BooksGenreSearch' => {
'parent' => ,
'current' => ,
'child' => [
{
'genreName' => '本',
'genreId' => '001',
'genreLevel' => 1
},
{
'genreName' => 'CD',
'genreId' => '002',
'genreLevel' => 1
},
{
'genreName' => 'DVD',
'genreId' => '003',
'genreLevel' => 1
},
(以下省略)
};
Amazonと楽天の両方のAPIを見ていて思ったのですが、Amazonのカテゴリを表すBrowseNodeは、例えば"本"とかそういうカテゴリだけじゃなくて、"岩波書店"みたいな出版社にも適用されています。例えば、"岩波書店"にはBrowseNodeIdとして"516508"が割り振られていて、子ノードには"岩波文庫"や"岩波現代文庫"があり、「出版社別」みたいな切り口でも商品を分類することが可能です。
一方で楽天の場合は、商品一つに対してジャンルという純粋な一つのカテゴリしか設定されないようなデータ構造になっています。サイトを作る上では、様々な切り口で商品を分類できた方が集客がしやすいので、個人的には楽天ウェブサービスにもBrowseNodeみたいな概念を取り入れてもらいたいなぁと思いました。(リクエストはしました)
というわけであまりまとまってないですが、こうやってECサイトのAPIが利用できると個人でもECサイトが持てるので夢が広がっていいなぁと感じています。といってもアフィリエイトだったら利益はたかが知れているので、よっぽど頑張らないといけないと思いますが...