古い記事
ランダムジャンプ
新しい記事
PerlでアマゾンWebサービスをいじるときは、
いつも、LWP で XML 取ってきて正規表現によるパターンマッチや
XML::Simple を使ってごにょごにょしているんだけど、
「CPANにあるなら使おうキャンペーン」中なので、
いまさらながら、某アルファギーク氏が昔「一番好きなPerlモジュール」
として挙げていたことで知られる Net::Amazon を試してみる。
Cache::File[2006-10-17-1]と連携できるのが嬉しいね。

Michael Schilli / Net-Amazon-0.35 - search.cpan.org
http://search.cpan.org/~mschilli/Net-Amazon-0.35/

ところで、locale を jp にすると、発売日(ReleaseDate)の情報が
取れないのですが、これってそういうもの?
追記061021: データがないのが取れてなかっただけの模様)
amazon がらみのサービスでよく「発売日が取得できなくうんぬん」とか
いうアナウンスがあったりするけど、それってこれがらみ?
あと、authors() と Authors() の使い分けが面倒くさい。

素直に自前のモジュール(Yasazon::Amazon とかある)を使い続けるかな…。

以下、動作確認サンプルプログラム:

#!/usr/bin/perl
use strict;
use warnings;
use Net::Amazon;
use Cache::File;
use Encode;
binmode STDOUT, ":utf8";

my $cache = Cache::File->new(cache_root => '/var/tmp/cache-amazon',
                             lock_level => Cache::File::LOCK_LOCAL(),
                             default_expires => '24 hours');

my $ua = Net::Amazon->new(token => 'YOUR_TOKEN',
                          locale => 'jp',
                          cache => $cache,
                          max_pages => 1,
                          );

#my $response = $ua->search(asin => '4873110505');
#my $response = $ua->search(blended => "Perl");
my $response = $ua->search(keyword => "Perl", mode => "books-jp");
#my $response = $ua->search(keyword => "Perl", mode => "books");

if (not $response->is_success()) {
    print "Error: ", $response->message(), "\n";
    exit;
}

print $response->as_string(), "\n";

for ($response->properties()) {
    print "Asin()\t", $_->Asin(), "\n";
    print "ProductName()\t", $_->ProductName(), "\n";
    print "Availability()\t", $_->Availability(), "\n";
    print "Catalog()\t", $_->Catalog(), "\n";
    print "authors()\t", $_->authors(), "\n";
    #print "Authors()\t", $_->Authors(), "\n";
    print "ReleaseDate()\t", $_->ReleaseDate(), "\n";
    print "Manufacturer()\t", $_->Manufacturer(), "\n";
    print "ImageUrlSmall()\t", $_->ImageUrlSmall(), "\n";
    print "ImageUrlMedium()\t", $_->ImageUrlMedium(), "\n";
    print "ImageUrlLarge()\t", $_->ImageUrlLarge(), "\n";
    print "ListPrice()\t", $_->ListPrice(), "\n";
    print "OurPrice()\t", $_->OurPrice(), "\n";
    print "UsedPrice()\t", $_->UsedPrice(), "\n";
    print "SalesRank()\t", $_->SalesRank(), "\n";
    print "Media()\t", $_->Media(), "\n";
    print "NumMedia()\t", $_->NumMedia(), "\n";
    print "ProductDescription()\t", $_->ProductDescription(), "\n";
    print "CollectiblePrice()\t", $_->CollectiblePrice(), "\n";
    print "CollectibleCount()\t", $_->CollectibleCount(), "\n";
    print "NumberOfOfferings()\t", $_->NumberOfOfferings(), "\n";
    print "UsedCount()\t", $_->UsedCount(), "\n";
    print "ThirdPartyNewPrice()\t", $_->ThirdPartyNewPrice(), "\n";
    print "ThirdPartyNewCount()\t", $_->ThirdPartyNewCount(), "\n";
    print "year()\t", $_->year(), "\n";
    print "browse_nodes()\t", $_->browse_nodes(), "\n";
    print "similar_asins()\t", $_->similar_asins(), "\n";
}
この記事に言及しているこのブログ内の記事