PerlでAmazon Product Advertising APIのBrowseNodeLookupを行なう
2009 年 9 月 23 日
コメントはありません
AmazonのProduct Advertising APIで、あるカテゴリの下にあるカテゴリ(BrowseNode)を取得するPerlスクリプトを書いてみました。最初はNet::Amazonを使っていたのですが、オブジェクトを大量に生成するためかとてつもなく重いのと、返ってくるオブジェクトの構成がよくわからなかったので、自前で処理してみるとさくっとできました。
#!/usr/bin/env perl use strict; use warnings; use Encode qw(encode); use LWP::UserAgent; use URI::Amazon::APA; use XML::Simple; use YAML qw(Dump); unless (@ARGV) { print STDERR "usage: $0 browse_node_id\n"; 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 $res = $ua->get($uri); 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
コメント