Tech Blog - mixross

Product Advertising API をVer4.0からVer5.0へ移行

このエントリーをはてなブックマークに追加
LINE

Amazonからのお知らせ

アソシエイトのページに行くとこんな通知が

通知
Product Advertising API(以下、PA-API)をバージョンアップしろという内容

認証情報作成

まずは新しい認証鍵を作成する。
メニューの「ツール」->「Product Advertising API」
https://affiliate.amazon.co.jp/assoc_credentials/home

Product Advertising API


「認証キーの管理」の「新しい認証キーを取得する」

認証キーの管理

「移行の確認」ダイアログが出てきたら「続ける」

認証キーの管理

アクセスキーとシークレットキーが表示されるので控えておく
(シークレットキーは後で確認ができないので注意)

Product Advertising API Scratchpad

https://webservices.amazon.co.jp/paapi5/scratchpad/index.html
Amazonが提供してくれているPA-API Ver5の検証ツール。
左側にある「Select operation」にある4種類のAPIを確認できる。

  • GetBrowseNodes
  • GetVariations
  • GetItems
  • SearchItems

必要な情報を入力し、「Run Request」とするとAPIのレスポンスとともに、Java、PHP、curlのコードも生成してくれる。

GCP - Cloud Functions

旧バージョンではbottlenoseを使用していましたが、今回はAmazonが提供しているPython用のSDKをラップしたライブラリamightygirl.paapi5-python-sdkを使用しました。

requirements.txtに以下のコードを追加

requirements.txt
amightygirl.paapi5-python-sdk == 1.0.0

main.pyの頭の方に以下のコードを追加し、以下の3つの定数にはここで作成したアクセスキーとシークレットキー、パートナータグ(トラッキングID)をそれぞれ設定する。

  • PAAPI_ACCESS_KEY
  • PAAPI_SECRET_KEY
  • PAAPI_PARTNER_TAG
main.py
import paapi5_python_sdk
from paapi5_python_sdk.api.default_api import DefaultApi
from paapi5_python_sdk.search_items_request import SearchItemsRequest
from paapi5_python_sdk.search_items_resource import SearchItemsResource
from paapi5_python_sdk.partner_type import PartnerType
from paapi5_python_sdk.rest import ApiException

PAAPI_ACCESS_KEY = '<access-key>'
PAAPI_SECRET_KEY = '<secret-key>'
PAAPI_PARTNER_TAG = '<partner-tag>'

下のコードはキーワードを受け取ってPA-APIのSearchItemsを呼び出す関数のサンプル。main.pyに記述することになる。
ここではsearch_indexにHobbies、resourcesにSearchItemsResource.IMAGES_PRIMARY_MEDIUMを指定しているので、
「おもちゃカテゴリー内をkeywordで検索し、基本情報にプラスして中サイズの画像URLを取得する」仕様となっている。

main.py
def searchItems(keyword):
	api = DefaultApi(
		access_key=PAAPI_ACCESS_KEY, secret_key=PAAPI_SECRET_KEY, host='webservices.amazon.co.jp', region='us-west-2'
	)

	page = 1;
	total_page = 0;

	while True:
		try:
			search_items_request = SearchItemsRequest(
				partner_tag=PAAPI_PARTNER_TAG,
				partner_type=PartnerType.ASSOCIATES,
				keywords=keyword,
				search_index='Hobbies',
				item_count=10,
				resources=[SearchItemsResource.IMAGES_PRIMARY_MEDIUM],
			)
		except ValueError as exception:
			print("Error in forming SearchItemsRequest: ", exception)
			sys.exit(1)

		try:
			res = api.search_items(search_items_request)

			if res.errors is not None:
				print("\nPrinting Errors:\nPrinting First Error Object from list of Errors")
				print("Error code", res.errors[0].code)
				print("Error message", res.errors[0].message)
				sys.exit(1)

			if res.search_result is not None:
				if page == 1:
					total_page = (res.search_result.total_result_count // 10) + 1;
					print('total_page', total_page)

				for item in res.search_result.items:
					# ここで取得した商品(item)毎に任意の処理を行う
					# 例えばresourcesに設定した中サイズ画像のURLはitem.images.primary.medium.urlで参照できる

				if page >= total_page: break
				if page >= 10: break

				page += 1

		except ApiException as exception:
			print("Error calling PA-API 5.0!")
			print("Status code:", exception.status)
			print("Errors :", exception.body)
			print("Request ID:", exception.headers["x-amzn-RequestId"])
			sys.exit(1)

		except TypeError as exception:
			print("TypeError :", exception)
			sys.exit(1)

		except ValueError as exception:
			print("ValueError :", exception)
			sys.exit(1)

		except Exception as exception:
			print("Exception :", exception)
			sys.exit(1)

search_indexに設定できる値の一覧は
https://docs.aws.amazon.com/AWSECommerceService/latest/DG/LocaleJP.html
で確認できる

resourcesに設定する値は https://webservices.amazon.com/paapi5/documentation/search-items.html#resources-parameter
で確認できるので、文字列の配列にして設定する。
上のサンプルのようにSDKのSearchItemsResourceの変数を使用する場合は、文字列の値を.(ドット)を_(アンダーバー)に置換し、全て大文字に変換にしたものが変数名になる。

RSS