[メモ]プログラムでAmazonの商品検索を行う
Amazon Web サービスの「Product Advertising API」を使って行います。
環境整備の手順については、ココのサイトを参考にさせていただきました。
大まかな手順としては、
1)トラッキングIDが必要なので、Amazon アソシエイト・プログラムへ参加します。
2)Product Advertising APIアカウントを作成します。
⇒アソシエイトの画面の右上に「Product Advertising API」のボタンがあります
クリックしたら「アカウント作成」なボタンがあるページが表示されますので、アカウントを作成します。
3)AccessキーとSecret Accessキーを取得します。
登録が終了すると、下記の画面が表示されます。
・「Manage Your Account」をクリックします。
⇒「アカウントサービス」画面が表示されます。
・「アクセスキー情報」からアクセスキーとシークレットアクセスキーが取得できます。
※次回以降はログイン画面から操作できます。
4)頑張ってプログラムを作りましょう(^ ^)v
■「Signed Requests Helper」では、Signature無しのURLをSignature付きに変換してくれます。
■サンプル(元プログラムあったんですが、参照先が不明ですm(_ _)m)
#!/usr/bin/perl
#
use strict;
use warnings;
use Digest::SHA qw(hmac_sha256_base64);
use DateTime;
use URI::Escape;
use LWP::Simple;
use XML::Simple;
use Data::Dumper;
use Encode;
use constant ACCESS_KEY_ID => 'XXXXXXX';
use constant SECRET_ACCESS_KEY => 'YYYYYYY';
my $itemId = '4344016645';
my $dt = DateTime->now;
my $config = {
AWSAccessKeyId => ACCESS_KEY_ID,
AssociateTag => 'aaaaaaa-22',
ItemId => $itemId,
Operation => 'ItemLookup',
ResponseGroup => 'Small%2CImages',
Service => 'AWSECommerceService',
Timestamp => uri_escape("$dt") . 'Z',
Version => '2009-07-01'
};
my $use_config = join '&', map{ $_ . '=' . $config->{$_} } sort keys %$config;
my $signature = "GET\n";
$signature .= "ecs.amazonaws.jp\n";
$signature .= "/onca/xml\n";
$signature .= $use_config;
my $hashed_signature = hmac_sha256_base64( $signature, SECRET_ACCESS_KEY );
while (length( $hashed_signature ) % 4) {
$hashed_signature .= '=';
}
my $accessData = 'http://ecs.amazonaws.jp/onca/xml?' . $use_config . '&Signature=' . uri_escape( $hashed_signature);
#print $accessData . "\n";
my $response = get( $accessData );
print $response . "\n";
my $parser = XML::Simple->new;
my $data = $parser->XMLin( $response );
warn Dumper( $data );
print $data->{Items}->{Item}->{ItemAttributes}->{ProductGroup} . "\n";
print utf8::is_utf8( $data->{Items}->{Item}->{ItemAttributes}->{Author}) ? 'flagged' : 'no flag';
print "\n";
print encode( 'utf-8', $data->{Items}->{Item}->{ItemAttributes}->{Author}) . "\n";
print encode( 'utf-8', $data->{Items}->{Item}->{ItemAttributes}->{Title}) . "\n";