AmazonのProduct Advertising APIで、あるカテゴリの下にあるカテゴリ(BrowseNode)を取得するPerlスクリプトを書いてみました。最初はNet::Amazonを使っていたのですが、オブジェクトを大量に生成するためかとてつもなく重いのと、返ってくるオブジェクトの構成がよくわからなかったので、自前で処理してみるとさくっとできました。
#!/usr/bin/env perl
use strict;
use warnings;
use Encode qw(encode);
use LWP::UserAgent;
use XML::Simple;
use YAML qw(Dump);
unless (@ARGV) {
print STDERR "usage: $0 browse_node_idn";
exit 255;
}
my $uri = URI::Amazon::APA->new('http://ecs.amazonaws.jp/onca/xml');
my $browse_node_id = shift;
$uri->query_form(
Service => 'AWSECommerceService',
Operation => 'BrowseNodeLookup',
SearchIndex => 'Books',
BrowseNodeId => $browse_node_id,
);
$uri->sign(
key => 'key',
secret => 'secret_key'
);
my $ua = LWP::UserAgent->new;
my $content = XMLin($res->content);
my $children = $content->{BrowseNodes}->{BrowseNode}->{Children}->{BrowseNode};
if ($res->is_success) {
print encode('utf-8', Dump($children)), "n";
} else {
print $res->status_line, $res->as_string, "n";
}
$ perl sample_browse_node.pl 465610
とすると下みたいな感じで下の階層のカテゴリを表示します。ちなみに465610は本のBrowseNodeIdです。Net::Amazon--、URI::Amazon::APA++ということで。
---
- BrowseNodeId: 466284
Name: 文学・評論
- BrowseNodeId: 466288
Name: 思想・社会・ノンフィクション
- BrowseNodeId: 571582
Name: 人文・思想
- BrowseNodeId: 571584
Name: 社会・政治
- BrowseNodeId: 492152
Name: ノンフィクション
- BrowseNodeId: 466286
Name: 歴史・地理
- BrowseNodeId: 466282