Amazon MWS商品APIにアクセスするPerlのサンプルコードに続いて、今回はRubyのコードをご紹介したいと思います。
内容としては、HTTPのGETメソッドでAmazon MWS商品API のListMatchingProductsオペレーションを呼び出すという簡単なサンプルとなります。
現在Amazon MWSチームより、Java、C#、PHP言語によるクライアントライブラリーが提供されていますが、開発言語の違い、バージョンの違いにより、標準のクライアントライブラリーが使用できないケースもあります。このようなケースで、独自ライブラリーを作成する際に今回紹介するサンプルコードを参考にしてください。
本サンプルコードの使用者は、使用に先立って以下の事項に承諾したものとします。もし承諾いただけない場合は、本サンプルコードは使用しないで下さい。
- 本サンプルコードは現状のまま無保証、無サポートにて提供されます。使用者は自己の責任の下、本サンプルコードを使用します。
- 本サンプルコードを使用したことによる使用者の損害または損失について、開発者および提供者はいかなる責任も負いません。
- 本サンプルコードの使い方や不具合についての質問には、開発者および提供者は回答の義務を負いません。
Ruby拡張ライブラリ
今回のサンプルは、Linux版Rubyバージョン1.8.7 で動作確認しており、以下のRuby拡張ライブラリを利用しています。- uri - クエリー文字列パラメータのURIエンコード用
- time - パラメータの日時文字列作成用
- openssl,base64 - リクエストクエリの署名用
- net/https - WEBアクセス用
ソースコード
以下ソースコードを文字コードをUTF-8でファイルとして保存し、「####CONFIG####」内の各変数にAmazon MWS認証情報を設定してください。# -*- encoding: utf-8 -*- require 'uri' require 'time' require 'openssl' require 'base64' require "net/https" def url_encode(string) return URI.escape(string,Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) end #####################CONFIG-各種設定項目##################### METHOD="GET" ACCESS_KEY_ID='A*******************' PRIVATE_KEY='**************************' MARKET_PLACE_ID='A1VC38T7YXB528'; #Markeplace is JP SELLER_ID='A***************' ENDPOINT_SCHEME='https://' ENDPOINT_HOST='mws.amazonservices.jp' #Endpoint to JP MWS ENDPOINT_URI='/Products/2011-10-01' #####################CONFIG END################## #####################INPUT-入力項目####################### QUERY="村上 1q84" QUERYCONTEXTID="Books" #####################INPUT END################### params={ "AWSAccessKeyId"=>ACCESS_KEY_ID, "MarketplaceId"=>MARKET_PLACE_ID, "SellerId"=>SELLER_ID, "SignatureMethod"=>"HmacSHA256", "SignatureVersion"=>"2", "Version"=>"2011-10-01", "Timestamp"=>Time.now.utc.iso8601 } params["Action"]="ListMatchingProducts" params["Query"]=QUERY params["QueryContextId"]=QUERYCONTEXTID #Sorting parameters - パラメータのソート values = params.keys.sort.collect {|key| [url_encode(key), url_encode(params[key].to_s)].join("=") } param=values.join("&") #Creating Signature String - 電子署名の作成 signtemp = METHOD+"\n"+ENDPOINT_HOST+"\n"+ENDPOINT_URI+"\n"+param signature_raw = Base64.encode64(OpenSSL::HMAC.digest('sha256',PRIVATE_KEY,signtemp)).delete("\n") signature=URI.escape(signature_raw,Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) param+="&Signature="+signature #Creating URL - URLの作成 url=ENDPOINT_SCHEME+ENDPOINT_HOST+ENDPOINT_URI+"?"+param puts url uri=URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE #performing HTTP access - HTTPアクセスを実行 request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) #output results - 結果を出力 puts response.body
※paramsを構成するクエリーのパラメータについては「開発者ガイド」より「独自のクライアントライブラリを作成する場合」をご参照ください。
※ListMatchingProductsオペレーションの仕様について詳しくは、Amazon MWS商品APIリファレンスをご参照ください。
サンプルの実行方法
上記ソースコードをファイルに保存し、以下のように実行してください。(例:ファイル名=exec_sample.rb)$ ruby exec_sample.rbこれにより、QUERY=で指定する検索キーに応じた商品情報のレスポンスが表示されます。
以上になりますが、今回のソースコードを参考にして、商品APIにかぎらず独自ライブラリーの作成にお役立てください。