Amazon.comの500アイテムとAmazon.co.jpのアイテムの価格を一挙に比較するプログラム（パート１）

Amazon.comの５００アイテムをAmazon.co.jpにある同じASINコードのアイテムの価格を比較するコードです。

パート１で、５００アイテムを抽出します。
パート２で、Amazon.comとAmazon.co.jpの価格の比較をします。
パート３で、価格リストを見やすく加工します。

まずは、今回のパート１の解説です。
まずは、Amazon.comのAWSのIDと秘密鍵が必要です。IDなどの取得方法は、「Amazon海外輸出」の類の本に掲載されていますので、自分で探してください。
```@Keywords```に、適当なキーワードを入れて下さい。（１０個）
実行すると検索したASINが５００個　STDOUTに出力されます。
今日はここまで。



```perl:ama.pl
#!/usr/bin/perl -w
use strict;
use warnings;

use Data::Dumper;

use RequestSignatureHelper;
use LWP::UserAgent;
use XML::Simple;

use constant myAWSId        => ''; // AWSのIDを入れて下さい
use constant myAWSSecret    => ''; // AWSの秘密鍵を入れて下さい
use constant myEndPoint     => 'ecs.amazonaws.com';

# see if user provided ItemId on command-line
my $itemId = shift @ARGV || 'B00006JNN7';

# Set up the helper
my $helper = new RequestSignatureHelper (
    +RequestSignatureHelper::kAWSAccessKeyId => myAWSId,
    +RequestSignatureHelper::kAWSSecretKey => myAWSSecret,
    +RequestSignatureHelper::kEndPoint => myEndPoint,
);
my @SearchIndexs = ( 'All' );
my @Keywords = ( 'japan import u' , 'japan import v' , 'japan import w' , 'japan import x' , 'japan import y' , 'japan import z' , 'dragonball' , 'test' , 'vanhalen' , 'japan trust' );

for (my $k=0; $k <=  9; $k++) {
        for (my $i=1; $i <= 5; $i++) {
                my $request = {
                        Service => 'AWSECommerceService',
                        Operation => 'ItemSearch',
                        AssociateTag  => '', // amazon.comのアソシエイトタグを入れて下さい
                        SearchIndex => $SearchIndexs[0],
                        Keywords => $Keywords[$k],
                        ResponseGroup => 'ItemIds,SalesRank,OfferSummary',
                        ItemPage => $i . '' ,
                };

                # Sign the request
                my $signedRequest = $helper->sign($request);

                # We can use the helper's canonicalize() function to construct the query string too.
                my $queryString = $helper->canonicalize($signedRequest);
                my $url = "http://" . myEndPoint . "/onca/xml?" . $queryString;

                my $ua = new LWP::UserAgent();
                my $response = $ua->get($url);
                my $content = $response->content();
                #print "Recieved Response: $content \n";

                my $xmlParser = new XML::Simple();
                my $xml = $xmlParser->XMLin($content,ForceArray=>['Item']);

                #print Dumper($xml) ;

                foreach ( @{ $xml->{Items}{Item} } )
                {
                        print $_->{ASIN} . "\n" ;
                }

                if ($response->is_success()) {
                } else {
                        my $error = findError($xml);
                        if (defined $error) {
                                print "Error: " . $error->{Code} . ": " . $error->{Message} . "\n";
                        } else {
                                print "Unknown Error!\n";
                        }
                }
                sleep 1;
        }
}
sub findError {
    my $xml = shift;

    return undef unless ref($xml) eq 'HASH';

    if (exists $xml->{Error}) { return $xml->{Error}; };

    for (keys %$xml) {
        my $error = findError($xml->{$_});
        return $error if defined $error;
    }

    return undef;
}
```

perlソースコード終わり