今回は、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にかぎらず独自ライブラリーの作成にお役立てください。また、今回は、フィードの送信、レポート取得方法には触れていませんが、次の機会にご紹介したいと思います。
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。