【Python】Amazon Product Advertising APIを利用したい-概要編

本ページはプロモーションが含まれています

Amazonの商品情報を取得するAPIにアフィリエイター向けのProduct Advertising API(PA-API)があります

2019年12月からバージョン4.0から5.0へと一新された影響か、2023年12月時点で利用できる情報とできない情報がネットに混在しているので自分の勉強と備忘録半分で利用方法をまとめています

今回はAPIの概要をまとめただけで実際のソースは記載していません

加えて、そもそも利用するためには申請やらなんやらが必要なのでまだの方は↓↓を参考にしてみてください

まずはライブラリをインストール

Python用のsdkは準備してあるので公式のものを使いたい方はコチラからどうぞ

With SDK · Product Advertising API 5.0

私は「python-amazon-paapi」の方が使いやすそうなのでこちらを選択

と言うか、中身を見ればラッパーなのがわかるのでこっちの方が使いやすいはず

from paapi5_python_sdk.api.default_api import DefaultApi
from paapi5_python_sdk.api_client import ApiClient
from paapi5_python_sdk.configuration import Configuration
from paapi5_python_sdk.partner_type import PartnerType
from paapi5_python_sdk.rest import ApiException
from paapi5_python_sdk.get_items_request import GetItemsRequest
from paapi5_python_sdk.search_items_request import SearchItemsRequest
from paapi5_python_sdk.get_variations_request import GetVariationsRequest
from paapi5_python_sdk.get_browse_nodes_request import GetBrowseNodesRequest

import time, json, pickle, pprint
from urllib.parse import quote as urllib_quote
from .entities import AmazonProduct, AmazonBrowseNode
from .constant import *
from .exception import AmazonException

と言うことで早速pipでインストール

pip install python-amazon-paapi

各APIの仕様を確認

大前提として公式ページにある通り、PA-APIは・・・

[重要] PAAPIはセルフサービスでのご利用を前提としており、Amazonでの技術的なサポートは現在行っておりません。

https://affiliate.amazon.co.jp/assoc_credentials/home

なので、勝手に調べて勝手に使うスタンス

流石にAPIリファレンスはあるのでここを参考に使い方を読み解いてく

Operations · Product Advertising API 5.0

各APIの説明と仕様サンプルを

GetBrowseNodes

“BrowseNodes”では聞きなれないけど要は指定したカテゴリー直下のカテゴリーリストを収集できる

実際の画面を例にすると

パソコン・周辺機器」をベース
キーボード・マウス・入力機器」をベース

パソコン・周辺機器」をベースにデータ取得すると「デスクトップ~シングルボード・・・」の18カテゴリ情報を収集できる

で、その中で次は「キーボード・マウス・入力機器」をベースにデータ取得すると「パソコン用キーバード~ゲーミングキーボード・・・」の13カテゴリ情報を収集できる

で、その中で・・・を繰り返すと最初に指定したカテゴリ配下のカテゴリツリーを収集できるわけです

収集したデータをいい感じに加工した結果はこんな感じ

カテゴリー1カテゴリー2カテゴリー3カテゴリー4
パソコン・周辺機器デスクトップ・・・
パソコン・周辺機器ノートパソコン・・・
パソコン・周辺機器タブレット・・・
パソコン・周辺機器サーバー・・・
パソコン・周辺機器キーボード・マウス・入力機器パソコン用キーボード
パソコン・周辺機器キーボード・マウス・入力機器マウス
パソコン・周辺機器キーボード・マウス・入力機器テンキー
パソコン・周辺機器キーボード・マウス・入力機器キーボード・マウスセット
パソコン・周辺機器キーボード・マウス・入力機器トラックボール
パソコン・周辺機器キーボード・マウス・入力機器ゲーミングキーボード
パソコン・周辺機器キーボード・マウス・入力機器ゲームパッド
パソコン・周辺機器キーボード・マウス・入力機器ゲーミングマウス
パソコン・周辺機器キーボード・マウス・入力機器ジョイスティック
パソコン・周辺機器キーボード・マウス・入力機器ペンタブレット
パソコン・周辺機器キーボード・マウス・入力機器ペンタブレット用ペン ・替芯ペンタブレット用ペン本体
パソコン・周辺機器キーボード・マウス・入力機器ペンタブレット用オーバーレイシート
パソコン・周辺機器キーボード・マウス・入力機器ゲーミングキーボード・マウスセット
パソコン・周辺機器ディスプレイ・・・
・・・・・・・・・

これがないと次の”SearchItems”でうまく情報収集できないので”GetBrowseNodes”は結構大事で一番最初に知っておく必要があると思う

余談

APIの仕様とは関係ない余談でカテゴリツリーを作ってみて気づく、同じカテゴリが違う親カテゴリの下に複数ぶら下がっていることがあります

SearchItems

私が実際に使いたかったAPIがコレ

検索した商品情報を収集してくれるAPIでその条件はフリーワード検索含めて様々

ポイントになりそうな点は

  • 一度に取得できる商品情報は最大10件 ※11件目以降も指定すれば取得可能
  • カテゴリを指定した方が良い
  • ソート基準に売れ筋ランキングはない

カテゴリは例えば”マウス“でフリーワード検索にすると”PCマウス”以外にも”マウスパッド”や“マウスウォッシュ”などが該当してしまい不純物になるのでしっかりと”マウス”や”ゲーミングマウス”のカテゴリーで絞り込んであげる必要がある

ソート基準はAPIリファレンスを見ると下記6パターンあって”Featured”が一番使い道ありそう

SortBy Value(日本語翻訳)説明(日本語翻訳)
AvgCustomerReviews平均顧客レビュー数平均的な顧客レビューに従って結果を並べ替えます
Featured特徴注目アイテムの順位が高い順に結果を並べ替えます
NewestArrivals最新の到着結果を新着順に並べ替えます
Price:HighToLow価格:高から低まで最も高価なものから最も安価なものまで結果を並べ替えます
Price:LowToHigh価格:低から高まで結果を最も高価なものから最も高価なものまで並べ替えます
Relevance関連性関連する項目が上位にあるもので結果を並べ替えます

指定しない場合は「結果はMarketplaceと のSearchIndex組み合わせのデフォルトの並べ替えオプション」が適用されるらしいけど具体的には正直よくわからない・・・

売れ筋ランキングそのままではなかったのでAmazon的おすすめアルゴリズムソートって感じなのかも?

参考

個人的には売れ筋ランキングで商品取得したかったのですがきれいに取得できるソートパラメータはなく、デフォルトが一番ランキング上位に近かったです

色々試した結果、カテゴリだけ指定して収集した後に加工するのが一番良さそうってのが個人的最終結論

GetItems

APIとしてなASINコードベースで商品情報を収集できる

最初から対象のASINコードが決まっている人はこれを使えばOK

ASINコードにパートナータグ等必須項目を送れば商品情報が返ってくるシンプルな作りなのでここでは割愛・・・

要望もらえればいつかちゃんと調べて追記するかも

GetVariations

使いどころがわからず今は塩漬け・・・

気が向いたら調べますw

リクエストの制限

公式APIにあるある、APIを使える回数に制限があるので抜粋すると

  • 初期リクエスト可能数 : 1日あたり 8,640リクエスト(API利用開始より60日間)
  • PA-APIより取得した商品リンクより発生した、過去30日間の発送済み商品売上$0.05(日本円で約5円)ごとに1リクエスト追加
  • 1日の最大リクエスト可能数は、1日あたり864,000リクエスト
https://affiliate.amazon.co.jp/help/node/topic/GW65C7J2CSK7CA6C

つまり最大限利用したい場合は過去30日間で

(864,000:最大リクエスト数 – 8,640:初期リクエスト数) / 5円 = 約171,000円

の売上が必要なようなので大量のリクエストを送りたい場合は売り上げと睨めっこしながら上限把握しましょう

そしてもう一つ大事なことがありまして

売上実績の発生がない場合は、PA-APIの利用開始はできません。
また、発送済み商品売上が過去30日以内に発生していない場合、PA-APIをご利用いただけなくなる恐れがございます。

https://affiliate.amazon.co.jp/help/node/topic/GW65C7J2CSK7CA6C

2019年01月23日以降、過去30日以内のPA-API経由の売上実績(発送済み商品売上)がない場合、PA-APIへのアクセスができなくなる可能性がございます。

https://affiliate.amazon.co.jp/help/node/topic/GW65C7J2CSK7CA6C

きっと大事なことだから2回記載されているのでしょう

実際私はプログラム作りに勤しんでしまった結果、この30日ルールに気づいておらず無事利用できなくなりました

そしてこの事実に気づくのが遅れる理由にエラーコードが”TooManyRequests”で返ってくるところにあります

{
    "Code": "TooManyRequests",
    "Message": "The request was denied due to request throttling. Please verify the number of requests made per second to the Amazon Product Advertising API."
}

ヘルプページに”1秒間に1リクエストのサービス提供“と書いてあったので処理速度が速すぎたのかな?と思ってソースを見返してもAPIを叩いた直後に1秒待機を入れていて処理レスポンスで秒単位の時間がかかるのでそんなはずもなく、原因に辿り着くまで30分ほど悪戦苦闘してました

まとめ

試行錯誤してみると”GetBrowseNodes”の重要性を後から気付きます

コメント

タイトルとURLをコピーしました