アーカイブ

‘Amazon’ タグのついている投稿

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

2009 年 9 月 23 日 oinume コメントはありません

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
カテゴリー: Perl タグ: ,