oinume journal

Scratchpad of what I learned

PerlでAmazon Product Advertising APIのBrowseNodeLookupを行なう

AmazonProduct 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_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 $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