--- title: AmazonのWebサービスを使ってみる author: kazu634 date: 2009-05-28 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4617;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---

はてなで日記を書いて本の紹介をするときは、本の裏をめくってisbn13をasinに変換している。でも、この方法だと雑誌の場合うまくいかない。雑誌はasinでBから始まっている。普通のisbn13をasin(=isbn10)に変換するアルゴリズムでは変換できないからだ。

ある日、ふとAmazonでisbn13(=実はバーコードの数字と同じ)を入力すると、検索できることが判明。前に試したときはできなかったような気がするのだけれど。。。でも、isbn13を入力すれば、Amazonで管理しているID(=asin)が判明することがわかった。

というわけで、PerlでAmazonのWebサービスを使ってみようと決意したのであった。

Perlのコード

Perlの偉い人が「404 Blog Not Found:perl – URI::Amazon::APA released!」というのを公開しているので、それを活用する。とりあえずサンプルをそのままコピペしてみた。

# === Libraries ===
use strict;
use warnings;
use LWP::UserAgent;
use URI::Amazon::APA;
use XML::Simple;
use YAML::Syck;
# === Main part ===
my $u = URI::Amazon::APA->new('http://ecs.amazonaws.jp/onca/xml');
$u->query_form(
Service     => 'AWSECommerceService',
Operation   => 'ItemLookup',
ItemId      => shift || '9784798118925',
IdType      => 'EAN',
SearchIndex => 'Books',
);
$u->sign(
key    => 'キー',
secret => '秘密鍵'
);
my $ua = LWP::UserAgent->new;
my $r  = $ua->get($u);
print $r->status_line, "\n", YAML::Syck::Dump( XMLin( $r->content ) );

注意すべきは、

という点です。

実行結果

実行してみます:

~/bin on simoom634 [503] $: perl ./access_amazon.pl
200 OK
---
Items:
Item:
ASIN: 4798118923
DetailPageURL: http://www.amazon.co.jp/More-Joel-Software-Spolsky/dp/4798118923%3FSubscriptionId%3DAKIAI54BKVADN7EPRVZA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798118923
ItemAttributes:
Author: Joel Spolsky
Creator:
Role: 翻訳
content: 青木 靖
Manufacturer: 翔泳社
ProductGroup: Book
Title: More Joel on Software
ItemLinks:
ItemLink:
-
Description: Add To Wishlist
-
Description: Tell A Friend
-
Description: All Customer Reviews
-
Description: All Offers
Request:
IsValid: 'True'
ItemLookupRequest:
Condition: New
DeliveryMethod: Ship
IdType: EAN
ItemId: 9784798118925
MerchantId: Amazon
OfferPage: 1
ResponseGroup: Small
ReviewPage: 1
ReviewSort: -SubmissionDate
SearchIndex: Books
VariationPage: All
OperationRequest:
Arguments:
Argument:
-
Name: Operation
Value: ItemLookup
-
Name: Service
Value: AWSECommerceService
-
Name: Version
Value: 2009-01-01
-
Name: SearchIndex
Value: Books
-
Name: Signature
Value: gwfPyW7fYVfp/lFxseRThAn8uSCKV4+SRj5CAAJeBws=
-
Name: ItemId
Value: 9784798118925
-
Name: IdType
Value: EAN
-
Name: AWSAccessKeyId
Value: AKIAI54BKVADN7EPRVZA
-
Name: Timestamp
Value: 2009-05-28T14:46:19Z
HTTPHeaders:
Header:
Name: UserAgent
Value: libwww-perl/5.826
RequestId: 73da30ef-a5eb-4f67-bb5e-50b699de5177
RequestProcessingTime: 0.0748140000000000
xmlns: http://webservices.amazon.com/AWSECommerceService/2008-10-06