日記

AmazonMWS perlcode

AmazonMWS より転記(覚書)

perl jsonモジュール

Amazon MWSのPerlサンプルコード

今回は、Amazon MWSに商品APIに簡単にアクセスできる、Perlのコードをご紹介したいと思います。 現在Amazon MWSチームより、Java、C#、PHP言語によるクライアントライブラリーが提供されていますが、開発言語の違い、バージョンの違いにより、クライアントライブラリーが使用できないケースもあります。このようなケースの場合、独自ライブラリーを作成する際に今回紹介するサンプルコードを参考にしてください。

本サンプルコードの使用者は、使用に先立って以下の事項に承諾したものとします。もし承諾いただけない場合は、本サンプルコードは使用しないで下さい。

  • 本サンプルコードは現状のまま無保証、無サポートにて提供されます。使用者は自己の責任の下、本サンプルコードを使用します。
  • 本サンプルコードを使用したことによる使用者の損害または損失について、開発者および提供者はいかなる責任も負いません。
  • 本サンプルコードの使い方や不具合についての質問には、開発者および提供者は回答の義務を負いません。

Perlモジュール

以下のPerlモジュールを予め利用できるようインストールする必要があります。

  • URI::Escape – クエリース文字列パラメータのURIエンコード用
  • POSIX – パラメータの日時文字列作成用
  • Digest::SHA – リクエストクエリの署名用
  • LWP – WEBアクセス用

ソースコード

以下ソースコードをファイルとして保存し、Amazon MWS認証情報を「####CONFIG####」内の各変数に設定してください。

use strict;
use warnings;
binmode( STDOUT, ":utf8" );
use encoding 'utf8';
use URI::Escape;
use POSIX qw(strftime);
use Digest::SHA qw(hmac_sha256_base64 hmac_sha256_hex);
use LWP;

#####################CONFIG#####################
my $method="POST";
my $access_key_id='A***********'; 
my $private_key='*******************************';
my $market_place_id='A1VC38T7YXB528'; #Markeplace is JP
my $seller_id='*************';
my $endpoint_scheme='https://';
my $endpoint_host='mws.amazonservices.jp';
my $endpoint_uri='/Products/2011-10-01';
#####################CONFIG END##################

#####################INPUT#######################
my $query="村上春樹 1q84";
my $queryContextId="Books";
#####################INPUT END###################

my $param = "";
$param .= "AWSAccessKeyId=$access_key_id";
$param .= "&Action=ListMatchingProducts";
$param .= "&MarketplaceId=$market_place_id";
$param .= "&Query=".uri_escape_utf8($query);
$param .= '&QueryContextId='.$queryContextId;
$param .= "&SellerId=".$seller_id;
$param .= "&SignatureMethod=HmacSHA256";
$param .= "&SignatureVersion=2";
$param .= "&Timestamp=".uri_escape_utf8(strftime("%Y-%m-%dT%H:%M:%SZ",gmtime(time)));
$param .= "&Version=2011-10-01";

my $signtemp = $method."\n".$endpoint_host."\n".$endpoint_uri."\n".$param;
warn("SIGSTR:\n$signtemp\n");
my $b64_digest=hmac_sha256_base64($signtemp, $private_key);
while (length($b64_digest) % 4) {
	$b64_digest .= '=';
}
my $signature = uri_escape_utf8($b64_digest);
warn("SIGBASE64: $signature\n");
$param.="&Signature=".$signature;

my $url=$endpoint_scheme.$endpoint_host.$endpoint_uri."?".$param;

my $browser=LWP::UserAgent->new;
my $response=($method eq 'POST') ? $browser->post($url) : $browser->get($url);
warn "Can't access [$url] with:",$response->status_line unless $response->is_success;
print("RESPONSE for url($url):\n\n".$response->content);


※$paramを構成するクエリーのパラメータ項目は予めAPI仕様通りにソートされています。詳しくは「開発者ガイド」より「独自のクライアントライブラリを作成する場合」をご参照ください。

サンプルの実行方法

上記ソースコードをファイルに保存し、以下のように実行してください。(例:ファイル名=exec_sample.pl)

$ perl exec_sample.pl

以上になりますが、今回のソースコードを参考にして、商品APIにかぎらず独自ライブラリーの作成にお役立てください。また、今回は、フィードの送信、レポート取得方法には触れていませんが、次の機会にご紹介したいと思います。

アマゾンマーケットプレイス開発者ガイド(API)参考ページ

 

 

 

 

Last Updated on 2023年9月5日8:40 am by cgishop