Python [Python3] Amazon PA-APIを使って商品情報を取得する方法|ライブラリのインストールから実行まで

[Python3] Amazon PA-APIを使って商品情報を取得する方法|ライブラリのインストールから実行まで

amazon_pa-api_get_items_search_items_topimage

Amazonで取り扱っている商品の名前や価格、在庫の有無など商品情報をプログラムで取得できる、

Product Advertising API(PA-API)

検索に連動した商品をWEBサイトやアプリ内で表示するなど出来て、Amazonのアフェリエイトは勿論、売れ筋の分析などにも使えて非常に有効なAPIです。

でもAmazon公式を含め、PA-APIについて詳しい解説があまり無い。

筆者もこれまで使用したことは無く少し手こずりましたが、ひとまず商品情報を取得する事はできたので、情報共有したいと思います。

■環境
OS:Windows10
開発環境:PyCharm


Amazon Product Advertising API (PA-API) とは

Product Advertising API (PA-API) はAmazonで取り扱っている商品の情報や販売価格などを取得することができるAPIです。

キーワードによる商品検索や、価格や在庫の有無、セールランクなど商品の詳細情報を取得する事が可能で、キーワードに連動した商品情報を自動で取得し、WEBサイトやアプリに表示するような仕組みも構築できます。

Amazon PA-APIを使用できる条件

「Amazon Product Advertising API」を利用するには為には事前に「Amazonアソシエイト」の登録が必要です。

以前まで「Amazonアソシエイト」は審査が厳しく、登録のハードルが高いと言われていましたが、現在は仮登録後に一定期間内に、自身のサイトに設置したアフェリエイト広告から3回の売上成果が認められるとその後に簡単な審査、そして正式登録という手順に変更されました。

一定期間内に3回成果を出さないと正式登録にたどり着けないので、ハードルが低くなったのか高くなったのかの判断は難しいですが、 Amazonアソシエイトにチャレンジしやすくなったのは確かでしょう。

Amazonアソシエイトの紹介料が直近30日以内に発生している必要がある

Amazonアソシエイトの登録さえできれば、「Amazon Product Advertising API」が使えるワケではありません。

「Amazon Product Advertising API」を利用する条件として、Amazonアソシエイトの紹介料(売上成果)が直近30日以内に発生している必要があります。

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

Amazonアソシエイト

なので、「Amazon Product Advertising API」を途切れなく使用し続けるためには、毎月売上実績をだし続けないといけません。


ライブラリ amazon-paapi5 をインストール

Amazon Product Advertising API (PA-API) は、2019年12月からバージョンアップされた「PA-API5」となり、より使いやすく多くの情報を簡単に取得で出来るようになりました。

Pythonで「PA-API5」を使う方法

「PA-API5」をPythonで使用する為に、「PA-API5」のラッパー「amazon-paapi5」をpipコマンドでインストールします。

pip install amazon-paapi5

アクセスキーとシークレットキーを取得する

「Amazon Product Advertising API」でデータを取得する為には認証キーが必要です。

認証にはアクセスキーとシークレットキーの両方が必要で、かつセキュリティ上の理由によりシークレットキーはアクセスキーを取得した際にのみ確認する事ができます。

アクセスキーとシークレットキーは、登録したAmazonアソシエイトの管理ページで取得します。

Amazonアソシエイトの管理ページのメニューバーから ツール > Product Advertising API をクリック

アクセスキーとシークレットキーを取得する


PA-APIの利用開始で「PA APIアクセスのリクエスト」をクリック

「PA APIアクセスのリクエスト」をクリック


認証情報のダウンロードページで、アクセスキーとシークレットキーが表示されます。

表示されたアクセスキーとシークレットキーをコピーする、もしくは「認証情報をダウンロードする」をクリックしてCSVファイルをダウンロードします。

アクセスキーとシークレットキーは、Product Advertising APIへのリクエストを行う際に使用するので大切に保管してください。

次に「認証キーの管理」をクリック、次ページに移動します。

「認証キーの管理」をクリック


認証キーの管理が表示され、アクセスキーIDの項目に先程表示されたアクセスキーが表示されたら登録完了です。

アクセスキーIDの項目に先程表示されたアクセスキーが表示されたら登録完了


Amazon PA-APIを使って商品情報を取得する

・Amazonアソシエイトの登録
・amazon-paapi5 のインストール
・アクセスキーとシークレットキーの取得
・「Product Advertising API」の使用登録完了
・Amazonアソシエイトの紹介料が直近30日以内に発生している


晴れて「Product Advertising API」を使ってAmazonの商品情報を取得可能になりました。

ではPythonでamazon-paapi5 はどうやって使うのでしょう?

こちらのページから各言語毎に「PA-API5」のサンプルコードファイルをダウンロードできますが、妙に分かりにくい(もっとシンプルなのが欲しい、っていうか amazon-paapi5 のコードじゃない?)ので、筆者はgithubのページに乗っているコードを参考にしました。

https://webservices.amazon.com/paapi5/documentation/quick-start/using-sdk.html


サンプルコードが記載されたgithubページのアドレスは、amazon-paapi5の情報を確認するpipコマンドで確認できます。

pip show amazon-paapi5


インストールしたamazon-paapi5のVersion(Ver.1.1.2)他、さまざまな情報が確認できます。

Home-page:の項目にgithubのアドレスが表示されるので、クリックするとサンプルコードが記載されているgithubのページに移動できます。

Name: amazon-paapi5
Version: 1.1.2
Summary: Amazon Product Advertising API 5.0 wrapper for Python
Home-page: https://github.com/alefiori82/amazon-paapi5
Author: Alessandro Fiori
Author-email: alessandro.fiori@gmail.com
License: GPL-3.0

.

.

.

商品コードを指定して商品情報を取得する

githubのページに乗っているコードを参考にして、AmazonAPI関数に、アクセスキーとシークレットキー、そしてAmazonアソシエイトID(登録時に指定し末尾「-22」等が付いたID)、どの国のAmazonなのかを示す国コード”JP”を指定、接続に必要な環境変数を設定します。

.get_items(item_ids)に商品コードを指定

[‘B01N5IB20Q’,’B01F9G43WU’]と配列で2つの商品が指定されています。

from amazon.paapi import AmazonAPI

ACCESS_KEY = "ABCDEFGHIJKL4567890Q" #アクセスキー
SECRET_KEY = "ABcdefgHijKlmn12opQrsTu3456789" #シークレットキー
ASSOCIATE_ID = "abcdefghijklmn-22" #アソシエイトID
COUNTRY = "JP"  #日本のAmazonなので"JP"

amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_ID, COUNTRY )

products = amazon_api.get_items(item_ids=['B01N5IB20Q','B01F9G43WU'])

print(products['data']['B01N5IB20Q'])


コードを実行すると、指定した商品の情報がJSON形式で表示されました。

{'asin': 'B01N5IB20Q',
 'browse_node_info': {'browse_nodes': [{'ancestor': {'ancestor': {'ancestor': {'ancestor': {'ancestor': {'ancestor': None,
                                                                                                         'context_free_name': '45881051',
                                                                                                         'display_name': '45881051',
                                                                                                         'id': '45881051'},
                                                                                            'context_free_name': '商品',
                                                                                            'display_name': '商品',
                                                                                            'id': '45882051'},
                                                                               'context_free_name': 'パソコン周辺',
                                                                               'display_name': 'パソコン周辺',
                                                                               'id': '48335051'},
                                                                  'context_free_name': 'SSD(ソリッドステートドライブ)',
                                                                  'display_name': 'SSD(ソリッドステートドライブ)',
                                                                  'id': '899131051'},
                                                     'context_free_name': '内蔵タイプ',
                                                     'display_name': '内蔵タイプ',
                                                     'id': '2150844051'},
                                        'children': None,
                                        'context_free_name': '240GB~',
                                        'display_name': '240GB~',
                                        'id': '2150851051',
                                        'is_root': False,
                                        'sales_rank': None},
                                       {'ancestor': {'ancestor': {'ancestor': {'ancestor': None,
                                                                               'context_free_name': 'パソコン・周辺機器ストア',
                                                                               'display_name': 'パソコン・周辺機器',
                                                                               'id': '2127209051'},
                                                                  'context_free_name': 'パソコン・周辺機器',
                                                                  'display_name': 'カテゴリー別',
                                                                  'id': '2127210051'},
                                                     'context_free_name': 'PCパーツ',
                                                     'display_name': 'PCパーツ',
                                                     'id': '2151901051'},
                                        'children': None,
                                        'context_free_name': '内蔵型SSD',
                                        'display_name': '内蔵SSD',
                                        'id': '2151936051',
                                        'is_root': False,
                                        'sales_rank': 123}],
                      'website_sales_rank': {'context_free_name': 'パソコン・周辺機器ストア',
                                             'display_name': 'パソコン・周辺機器',
                                             'id': None,
                                             'sales_rank': 11447}},
 'detail_page_url': 'https://www.amazon.co.jp/dp/B01N5IB20Q?tag=afliquidjumpe-22&linkCode=ogi&th=1&psc=1',
 'images': {'primary': {'large': {'height': 500,
                                  'url': 'https://m.media-amazon.com/images/I/41cKE7Id6AL._SL500_.jpg',
                                  'width': 500},
                        'medium': {'height': 160,
                                   'url': 'https://m.media-amazon.com/images/I/41cKE7Id6AL._SL160_.jpg',
                                   'width': 160},
                        'small': {'height': 75,
                                  'url': 'https://m.media-amazon.com/images/I/41cKE7Id6AL._SL75_.jpg',
                                  'width': 75}},
            'variants': [{'large': {'height': 500,
                                    'url': 'https://m.media-amazon.com/images/I/41uEiWIaxmL._SL500_.jpg',
 

必要な商品情報だけを抜き出す

返される情報は膨大で必要のない情報も沢山。

しかし情報はJSON形式で返されるので、必要な情報のみを抜き出すのは簡単にできます。

JSON形式で返された結果を辿り、抜き出す情報に必要なキーを確認し指定します。

from amazon.paapi import AmazonAPI

ACCESS_KEY = "ABCDEFGHIJKL4567890Q" #アクセスキー
SECRET_KEY = "ABcdefgHijKlmn12opQrsTu3456789" #シークレットキー
ASSOCIATE_ID = "abcdefghijklmn-22" #アソシエイトID
COUNTRY = "JP"

amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_ID, COUNTRY )

products = amazon_api.get_items(item_ids=['B01N5IB20Q','B01F9G43WU'])


print(products['data']['B01N5IB20Q'].item_info.title.display_value) #'B01N5IB20Q'の表示タイトル
print(products['data']['B01N5IB20Q'].offers.listings[0].price.display_amount)
 #'B01N5IB20Q'の表示価格
print(products['data']['B01F9G43WU'].item_info.title.display_value)
 #'B01F9G43WU'の表示タイトル
print(products['data']['B01F9G43WU'].offers.listings[0].price.display_amount) #'B01F9G43WU'の表示価格


指定した2つの商品の表示タイトルと表示価格を抜き出して表示しました。

キングストンテクノロジー SSD 240GB 2.5インチ SATA3 TLC NAND採用 A400 【PS4動作確認済み】 SA400S37/240G
¥4,490
SanDisk 内蔵 2.5インチ SSD / SSD Plus 240GB / SATA3.0 / 3年保証 / SDSSDA-240G-G26
¥4,424

Amazon PA-APIを使ってキーワード検索の結果を取得する

商品コードを指定して商品情報を取得する方法は分かりました。

では、キーワードを指定して検索にヒットした商品の情報を取得するにはどうしたら良いのでしょう。

商品コードを指定する場合と同様にAmazonAPI関数で接続に必要な環境変数を設定し

.search_items(keywords)に、キーワード「香水」を指定して実行

from amazon.paapi import AmazonAPI

ACCESS_KEY = "ABCDEFGHIJKL4567890Q" #アクセスキー
SECRET_KEY = "ABcdefgHijKlmn12opQrsTu3456789" #シークレットキー
ASSOCIATE_ID = "abcdefghijklmn-22" #アソシエイトID
COUNTRY = "JP"
keyword = '香水'

amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_TAG, COUNTRY )

searchItems = amazon_api.search_items(keywords=keyword)

print(searchItems)


キーワード「香水」にヒットした商品アイテムがJSON形式で返されました。

{'data': [{'asin': 'B07YSQCL9S',
 'browse_node_info': {'browse_nodes': [{'ancestor': {'ancestor': {'ancestor': {'ancestor': {'ancestor': None,
                                                                                            'context_free_name': 'ビューティー',
                                                                                            'display_name': 'ビューティー',
                                                                                            'id': '52374051'},
                                                                               'context_free_name': 'ビューティー',
                                                                               'display_name': 'カテゴリー別',
                                                                               'id': '52391051'},
                                                                  'context_free_name': '香水・フレグランス',
                                                                  'display_name': '香水・フレグランス',
                                                                  'id': '170248011'},
                                                     'context_free_name': '女性用香水',
                                                     'display_name': '女性用',
                                                     'id': '52956051'},
                                        'children': None,
                                        'context_free_name': '女性用オードパルファム・EDP',
                                        'display_name': 'オードパルファム・EDP',
                                        'id': '5263241051',
                                        'is_root': False,
                                        'sales_rank': 1}],
                      'website_sales_rank': {'context_free_name': 'ビューティー',
                                             'display_name': 'ビューティー',
                                             'id': None,
                                             'sales_rank': 101}},
 'detail_page_url': 'https://www.amazon.co.jp/dp/B07YSQCL9S?tag=afliquidjumpe-22&linkCode=osi&th=1&psc=1',
 'images': {'primary': {'large': {'height': 500,
                                  'url': 'https://m.media-amazon.com/images/I/21-mZZI+Y+L._SL500_.jpg',
                                  'width': 500},
                        'medium': {'height': 160,
                                   'url': 'https://m.media-amazon.com/images/I/21-mZZI+Y+L._SL160_.jpg',
                                   'width': 160},
                        'small': {'height': 75,
                                  'url': 'https://m.media-amazon.com/images/I/21-mZZI+Y+L._SL75_.jpg',
                                  'width': 75}},
            'variants': None},
 'item_info': {'by_line_info': {'brand': {'display_value': 'shiro',
                                          'label': 'Brand',
                                          'locale': 'ja_JP'},
                                'contributors': None,
                                'manufacturer': {'display_value': 'shiro',
                                                 'label': 'Manufacturer',
                                                 'locale': 'ja_JP'}},
               'classifications': {'binding': None,
                                   'product_group': {'display_value': 'ビューティー',
                                                     'label': 'ProductGroup',
                                                     'locale': 'ja_JP'}},
               'content_info': None,
               'content_rating': None,
               'external_ids': {'ea_ns': {'display_values': ['4580514122314'],
                                          'label': 'EAN',
                                          'locale': 'en_US'},
                                'isb_ns': None,
                                'up_cs': None},
               'features': {'display_values': ['華やかに広がる香りをこころゆくまで楽しめるオードパルファン'],
                            'label': 'Features',

検索結果から必要な情報を抜き出す

JSON形式で返された情報から必要な情報だけを抜き出します。

商品コードを指定した場合と同様に、JSON形式で返された結果から、必要なキーを確認し指定します。

from amazon.paapi import AmazonAPI

ACCESS_KEY = "ABCDEFGHIJKL4567890Q" #アクセスキー
SECRET_KEY = "ABcdefgHijKlmn12opQrsTu3456789" #シークレットキー
ASSOCIATE_ID = "abcdefghijklmn-22" #アソシエイトID
COUNTRY = "JP"
keyword = '香水'

amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_TAG, COUNTRY )

searchItems = amazon_api.search_items(keywords=keyword)

print(searchItems['data'][1].item_info.title.display_value)  #検索結果の2番目の商品アイテムの表示タイトル
print(searchItems['data'][1].offers.listings[0].price.display_amount)   #検索結果の2番目の商品アイテムの表示価格
print(searchItems['data'][1].offers.summaries[0].highest_price.amount)   #検索結果の2番目の商品アイテムの最高価格
print(searchItems['data'][1].offers.summaries[0].lowest_price.amount)   #検索結果の2番目の商品アイテムの最低価格
print(searchItems['data'][1].offers.listings[0].availability.message)  #検索結果の2番目の商品アイテムの在庫の有無


キーワード「香水」でヒットした2番目の商品アイテムの「表示タイトル」「表示価格」「最高価格」「最低価格」「在庫の有無」を抜き出し表示しました。

カルバンクライン CK-one オーデトワレ 100ml
¥2,013 (¥20 / ミリリットル)
3200.0
2013.0
在庫あり。

検索結果の個数を設定する

検索にヒットする商品アイテムの数が多すぎるて困る場合は、取得するアイテム数を指定する事ができます。

.search_items(item_count)にアイテム数を指定

item_countに「2」を指定すると、検索結果が2件だけ返ってきます。

from amazon.paapi import AmazonAPI

ACCESS_KEY = "ABCDEFGHIJKL4567890Q" #アクセスキー
SECRET_KEY = "ABcdefgHijKlmn12opQrsTu3456789" #シークレットキー
ASSOCIATE_ID = "abcdefghijklmn-22" #アソシエイトID
COUNTRY = "JP"
keyword = '香水'

amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_TAG, COUNTRY )

searchItems = amazon_api.search_items(item_count = 2 ,keywords=keyword)

まとめ

Amazonで取り扱っている商品の名前や価格、在庫の有無など商品情報をプログラムで取得できる、
Product Advertising API(PA-API)の使い方を紹介しました。

Product Advertising APIに関してさまざまな情報があり、上手く情報が取れる人がいる一方で、環境によってはエラーばかりで上手くいかない人もチラホラ見受けられます。

なので、まずはシンプルなコードのサンプルを参考に初めて見るのが良いと思います。

Product Advertising API は、WEBサイトやアプリに設置するAmazonアフェリエイトは勿論、売れ筋商品の分析にも使えて便利。

Amazonアフェリエイトに登録できたら是非試してみてください。

Pythonのクローリング&スクレイピングに関する書籍



Twitter Facebook Pocket LINE はてブ

おすすめの関連記事
コチラの記事も読まれています
あわせてよく読まれている記事