↓もし、良かったらSNSでの紹介よろしくお願いします。

Amazon Product Advertising APIの利用(Python2と3)

bootstrap

Amazon Product Advertising APIの利用

blogging-336375_640

Amazon Product Advertising APIの使い方については下記の公式ドキュメントで説明されています。日本用の環境については実際に試してみないとわからないことが多いのでサンプルコードを載せてます。

Amazon公式ドキュメント(実行例)

本記事での変更点(日本仕様に変更)

  • “webservices.amazon.com”→”webservices.amazon.co.jp”
  • UTC時間→日本時間

Amazon Product Advertisingとは?

Amazon Product AdvertisingとはAmazonに売られている商品の価格や画像の取得ができるAPIです。このAPIを利用する場合、Amazonアソシエイトに登録して、APIの利用申請をする必要があります。

Amazon Product Advertisingを利用するために用意するもの

  • AWS access key ID:AKIAIOSFODNN7EXAMPLE

  • AWS secret key:1234567890

  • アソシエイトID:myid

Python2と3の変更点

Python2と3のサンプルコードの違いは下記の2点です。
そのまま使う場合はバージョンの違いに注意してください。

  • urllib.quote→urllib.parse.quote
  • 文字列をstr.encodeでバイト列へ変換(Python3)

サンプルコード(Python2)

# -*- coding: utf-8 -*-
import requests
import hmac
import hashlib
import base64
import urllib
from datetime import datetime

#Amazon Product Advertising APIの設定
hash_func = hashlib.sha256
encode_func = base64.b64encode

#id関係の設定
secret_key = "1234567890"
access_key = "AKIAIOSFODNN7EXAMPLE"
associate_id = "myid"

#メッセージの生成
time_stamp = urllib.quote(datetime.now().strftime('%Y-%m-%dT%H:%M:%S'))

#商品のASINコード
asin_code = "487311778X"#(ASINコードがない場合は変わりにISBN-10)

query="AWSAccessKeyId=" + access_key + \
"&AssociateTag=" + associate_id + \
"&ItemId=" + asin_code + \
"&Operation=ItemLookup" + \
"&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews" + \
"&Service=AWSECommerceService" + \
"&Timestamp=" + time_stamp + \
"&Version=2013-08-01"

api_domain = "webservices.amazon.co.jp"
api_page = "/onca/xml"
message = "\n".join(["GET", api_domain, api_page, query])

#HMACのSignature生成
sing_gen = hmac.new(secret_key, message, hash_func)
raw_sign = sing_gen.digest()
sign = urllib.quote(encode_func(raw_sign))

#APIの呼び出し
url = "http://" + api_domain + api_page + "?" + query + "&Signature=" + sign
res = requests.get(url)
with open(asin_code + ".xml", "wb") as f:
    f.write(res.content)

secret_key,access_key,,associate_idを正しく設定すると

サンプルコード(Python3)

import requests
import hmac
import hashlib
import base64
import urllib
from datetime import datetime

#Amazon Product Advertising APIの設定
hash_func = hashlib.sha256
encode_func = base64.b64encode

#id関係の設定
secret_key = "1234567890"
access_key = "AKIAIOSFODNN7EXAMPLE"
associate_id = "myid"

#メッセージの生成
time_stamp = urllib.parse.quote(datetime.now().strftime('%Y-%m-%dT%H:%M:%S'))

#商品のASINコード
asin_code = "487311778X"#(ASINコードがない場合は変わりにISBN-10)

query="AWSAccessKeyId=" + access_key + \
"&AssociateTag=" + associate_id + \
"&ItemId=" + asin_code + \
"&Operation=ItemLookup" + \
"&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews" + \
"&Service=AWSECommerceService" + \
"&Timestamp=" + time_stamp + \
"&Version=2013-08-01"

api_domain = "webservices.amazon.co.jp"
api_page = "/onca/xml"
message = "\n".join(["GET", api_domain, api_page, query])

#HMACのSignature生成
sing_gen = hmac.new(str.encode(secret_key), str.encode(message), hash_func)
raw_sign = sing_gen.digest()
sign = urllib.parse.quote(encode_func(raw_sign))

#APIの呼び出し
url = "http://" + api_domain + api_page + "?" + query + "&Signature=" + sign
res = requests.get(url)
with open(asin_code + ".xml", "wb") as f:
    f.write(res.content)

実行結果

world-map-146505_640
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

の情報が取得できます。