Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@DisneyAladdin

【Python】AmazonのPA-API 5.0でAmazonの商品情報をとる方法

はじめに

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を入力としたバージョンがこちら

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で商品の売れ筋具合の確認が可能です.ちなみにこのコードはせどり用に作ったモノです.

17
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
DisneyAladdin
Pythonが大好物です.

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?