Amazonの商品情報を取得するAPIにアフィリエイター向けのProduct Advertising API(PA-API)があります
2019年12月からバージョン4.0から5.0へと一新された影響か、2023年12月時点で利用できる情報とできない情報がネットに混在しているので自分の勉強と備忘録半分で利用方法をまとめています
今回はAPIの概要をまとめただけで実際のソースは記載していません
加えて、そもそも利用するためには申請やらなんやらが必要なのでまだの方は↓↓を参考にしてみてください
まずはライブラリをインストール
Python用のsdkは準備してあるので公式のものを使いたい方はコチラからどうぞ
https://webservices.amazon.com/paapi5/documentation/with-sdk.html
私は「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リファレンスはあるのでここを参考に使い方を読み解いてく
https://webservices.amazon.com/paapi5/documentation/operations.html
各APIの説明と仕様サンプルを
GetBrowseNodes
“BrowseNodes”では聞きなれないけど要は指定したカテゴリー直下のカテゴリーリストを収集できる
実際の画面を例にすると
「パソコン・周辺機器」をベースにデータ取得すると「デスクトップ~シングルボード・・・」の18カテゴリ情報を収集できる
で、その中で次は「キーボード・マウス・入力機器」をベースにデータ取得すると「パソコン用キーバード~ゲーミングキーボード・・・」の13カテゴリ情報を収集できる
で、その中で・・・を繰り返すと最初に指定したカテゴリ配下のカテゴリツリーを収集できるわけです
収集したデータをいい感じに加工した結果はこんな感じ
カテゴリー1 | カテゴリー2 | カテゴリー3 | カテゴリー4 |
パソコン・周辺機器 | デスクトップ | ・・・ | |
パソコン・周辺機器 | ノートパソコン | ・・・ | |
パソコン・周辺機器 | タブレット | ・・・ | |
パソコン・周辺機器 | サーバー | ・・・ | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | パソコン用キーボード | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | マウス | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | テンキー | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | キーボード・マウスセット | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | トラックボール | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ゲーミングキーボード | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ゲームパッド | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ゲーミングマウス | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ジョイスティック | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ペンタブレット | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ペンタブレット用ペン ・替芯 | ペンタブレット用ペン本体 |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ペンタブレット用オーバーレイシート | |
パソコン・周辺機器 | キーボード・マウス・入力機器 | ゲーミングキーボード・マウスセット | |
パソコン・周辺機器 | ディスプレイ | ・・・ | |
・・・ | ・・・ | ・・・ |
これがないと次の”SearchItems”でうまく情報収集できないので”GetBrowseNodes”は結構大事で一番最初に知っておく必要があると思う
SearchItems
私が実際に使いたかったAPIがコレ
※2024/9/22追記
いろいろ試した結果、どうやってもランキングには遠いリストしか取得できないので使わなくなりました
検索した商品情報を収集してくれる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を使える回数に制限があるので抜粋すると
https://affiliate.amazon.co.jp/help/node/topic/GW65C7J2CSK7CA6C
- 初期リクエスト可能数 : 1日あたり 8,640リクエスト(API利用開始より60日間)
- PA-APIより取得した商品リンクより発生した、過去30日間の発送済み商品売上$0.05(日本円で約5円)ごとに1リクエスト追加
- 1日の最大リクエスト可能数は、1日あたり864,000リクエスト
つまり最大限利用したい場合は過去30日間で
(864,000:最大リクエスト数 – 8,640:初期リクエスト数) / 5円 = 約171,000円
の売上が必要なようなので大量のリクエストを送りたい場合は売り上げと睨めっこしながら上限把握しましょう
そしてもう一つ大事なことがありまして
売上実績の発生がない場合は、PA-APIの利用開始はできません。
https://affiliate.amazon.co.jp/help/node/topic/GW65C7J2CSK7CA6C
また、発送済み商品売上が過去30日以内に発生していない場合、PA-APIをご利用いただけなくなる恐れがございます。
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分ほど悪戦苦闘してました
制限解除されるタイミング
公式の回答がFAQにありまして
1/23以降、PA-APIのアクセス権を失いました。どうしたら再びアクセスができるようになりますか?
過去30日内に売上実績がなかったためにPA-APIへのアクセス権を失った場合でも、Amazonアソシエイト・プログラムの他のサービス(アソシエイト・ツールバーなど)は引き続きご利用いただけます。PA-APIへのアクセスは売上実績が発生することで再びご利用いただけるようになります。
https://affiliate.amazon.co.jp/help/node/topic/GW65C7J2CSK7CA6C
細かい条件に付いては私の経験則を
売上実績について
審査の時は”180日以内に3回以上”が必要とされていましたが制限解除には”1回でOK“でした
制限解除されるタイミングについて
公式には”紹介販売が発送されてから 2 日以内“だそうです
Site Stripe などの他の製品リンク ツールを使用して収益を上げることは可能です。紹介販売が発送されてから 2 日以内に、Product Advertising API 5.0 に再度アクセスできるようになります。
https://webservices.amazon.com/paapi5/documentation/troubleshooting/api-rates.html
ただ実体験ではもう少しラグがありまして・・・
例えば↓レポートのパターンですが、すでに制限がかかっている状態なわけですが9/13に売上実績が1件ついていてAPIがの利用再開を確認できたのが9/21 14:30でした(30分前の14:00ではまだNG)のでまとめると
売上実績が付いた8日後の14:00~14:30の間
に利用再開できました※レポートベースで1週間後なんですかね
まとめ
試行錯誤してみると”GetBrowseNodes”の重要性を後から気付きます
コメント