LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

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

パート1で、500アイテムを抽出します。
パート2で、Amazon.comとAmazon.co.jpの価格の比較をします。
パート3で、価格リストを見やすく加工します。

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

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

use Data::Dumper;

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

use constant myAWSId        => ''; // AWSIDを入れて下さい
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ソースコード終わり

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2