#はじめに
Amazon PA-API(Product Advertising API)が2019年12月からバージョン4.0から5.0へと一新したためスクリプトもバージョン5.0用に組み直しました.(組み直す必要がありました)
#開発環境
- macOS Mojave 10.14.4
- Python3.7
#事前に準備するもの
Amazon出品者アカウントを作成後,こちらから
Access Key
Secret Key
Partner Tag
を取得してください.
pipコマンド等でamazon-paapi5
をインストールしてください.
#Scratchpad
PA-API5.0の仕様はこちらで確認できます.Scratchpadを使えば,上記で指定した3つのKEYと入力パラメータとそのバリューをテキストボックスにいれこむだけで簡単にAPIを叩くことができます.そのとき実際に生成されるAPIリクエストとそれに対するJSONレスポンスを一緒に確認できます.またPythonやPHPなどのサンプルリクエストコードも提示してくれます.非常に使いやすいのでコード書き始める前に一度こちらを試して見るのをお勧めします.
#サンプルコード
サンプル1
入力 | 出力 |
---|---|
検索ワード | ASIN 商品価格 商品URL 商品タイトル |
JANコード検索ワードにすることもできます. |
from amazon.paapi import AmazonAPI
KEY = "<INPUT YOUR KEY>"
SECRET = "<INPUT YOUR SECRET KEY>"
TAG = "<INPUT YOUR PARTNER TAG>"
COUNTRY = "JP"
keyword = "任天堂Switch"
amazon = AmazonAPI(KEY, SECRET, TAG, COUNTRY)
products = amazon.search_items(keywords=keyword)
asin = products["data"][0].asin
price = products["data"][0].offers.listings[0].price.amount
url = products["data"][0].detail_page_url
title = products["data"][0].item_info.title.display_value
print(asin, price, url, title)
サンプル2
入力 | 出力 |
---|---|
ASIN | ASIN 商品価格 JANコード 商品URL 商品タイトル |
.get_items()
メソッドは一度のリクエストで最大10ものASINを入力にAPIレスポンスを得られます.
#coding:utf-8
from amazon.paapi import AmazonAPI
KEY = "<INPUT YOUR KEY>"
SECRET = "<INPUT YOUR SECRET KEY>"
TAG = "<INPUT YOUR PARTNER TAG>"
COUNTRY = "JP"
asin_list = ["B087QZ1FWZ","B087QW57NZ","B081T9VJS4","B087QZGN24"]#一度に叩けるのは最大10個
amazon = AmazonAPI(KEY, SECRET, TAG, COUNTRY)
products = amazon.get_items(item_id_type="ASIN", item_ids=asin_list)
#各ASINに紐付く情報を取りだす
for asin in asin_list:
try:
asin = products["data"][asin].asin
price = int(products["data"][asin].offers.listings[0].price.amount)
jan = products["data"][asin].item_info.external_ids.ea_ns.display_values[0]
url = products["data"][asin].detail_page_url
title = products["data"][asin].item_info.title.display_value
print(asin, price, jan, url, title)
except:
None
以下のようなasin.txt
を入力としたバージョンがこちら
B087QZ1FWZ
B087QW57NZ
B081T9VJS4
B087QZGN24
B081T9Z4KG
B084XH5NW1
B07YNPWP5M
B086ZGFKPR
B086ZFTHY2
B084DF682G
B07QWR3KDW
B07MR6YMXC
B081T9MCG7
B084HPJWK9
B087D2NW77
#coding:utf-8
from amazon.paapi import AmazonAPI
from time import sleep
KEY = "<INPUT YOUR KEY>"
SECRET = "<INPUT YOUR SECRET KEY>"
TAG = "<INPUT YOUR PARTNER TAG>"
COUNTRY = "JP"
amazon = AmazonAPI(KEY, SECRET, TAG, COUNTRY)
def send_request(asin,b):
products = amazon.get_items(item_id_type="ASIN", item_ids=asin_list)
num = 0
for asin in asin_list:
try:
num += 1
asin = products["data"][asin].asin
price = products["data"][asin].offers.listings[0].price.amount
jan = products["data"][asin].item_info.external_ids.ea_ns.display_values[0]
url = products["data"][asin].detail_page_url
monourl = "https://mnrate.com/item/aid/"+asin
title = products["data"][asin].item_info.title.display_value
print (asin, jan, price)
b.write(asin+","+jan+","+title+","+price+","+url+","+monourl+"\n")
sleep(0.1)
except:
None
#何回のAPIリクエストが必要になるかの計算
pages = sum([1 for _ in open('asin.txt')])/10 + 1
a = open("asin.txt","r")#入力ファイル
b = open("jan.csv","w")#出力ファイル
asin_list = []
num = 0
for i in a:
num += 1
asin = i.rstrip()
asin_list.append(asin)
#ASINリストの長さが10になったらAPIを叩く
if len(asin_list) == 10:
send_request(asin_list,b)
asin_list = []
#一番最後のリクエスト
elif num == pages:
send_request(asin_list,b)
a.close()
b.close()
monourl
はモノレートページのURLで商品の売れ筋具合の確認が可能です.ちなみにこのコードはせどり用に作ったモノです.