PA-API とは

Product Advertising API (PA-API) とは、 Amazon が提供している、商品情報取得、検索サービスです。

当サイトは Amazon アソシエイト に参加し、書籍などの商品情報をこの PA-API より取得しています。

PA-API が新しくなる

【重要】PA-API 5.0移行に伴う手続きをお願いします(2020年3月9日まで)

と、何度も、何度もメールがあり、私もつい最近までスルーしていたのですが、 2020年3月9日 で 今までの PA-API ( v4 ) が使えなく なるため、移行の対応をしていない方は対応が必須です。

移行までの 4 ステップ

新しい PA-API への移行にはドキュメントがまとめられていますが、やっぱりかんたんにはわからない。

今回次のドキュメントで移行した点についてまとめます。

Amazon アソシエイト
ヘルプ > Product Advertising API について > 移行ガイド
https://affiliate.amazon.co.jp/help/node/topic/GZH32YX29UH5GACM

ステップ1: 新しい認証情報を取得する

これは、 AWS のアクセスキーを利用しているなら、アソシエイトのアクセスキーに入れ替えてください 、ということです。

すでにアソシエイトで生成したアクセスキーを利用している方は対応不要です。


アソシエイトにログインし、「ツール > Amazon Product Advertising API 」メニューをたどり、 「認証キーの管理」 にキーが表示されていれば OK です。

なければ、同じ画面の「認証情報を追加する」ボタンから生成してください。

ステップ2: PA-API 5.0を試してみる

自サイトにプログラミングする前に、PA-API v5 を実際に試して見るツールが提供されています。

それが、 PA-API 5.0 Scratchpad です。

PA-API 5.0 Scratchpad を使ってみる

では PA-API 5.0 Scratchpad を使ってみます。

PA-API 5.0 Scratchpad
https://webservices.amazon.co.jp/paapi5/scratchpad/index.html

上記 URL にアクセスします。

図 1 : PA-API 5.0 Scratchpad TOP ページ
図 1 : PA-API 5.0 Scratchpad TOP ページ

PA-API 5.0 Scratchpad に遷移したら、左サイドメニューから、今回は「 SearchItems 」をクリックします。

図 2 : PA-API 5.0 Scratchpad > SearchItems > Common parameters
図 2 : PA-API 5.0 Scratchpad > SearchItems > Common parameters

図 2 SerchItems に切り替わると、各種パラメーターの入力欄が表示されます。

Common parameters に 認証情報と Partner Tag を入力します。

Partner Tag はアソシエイトの ID で、 -22 で終わる文字列です。

認証情報は ステップ 1 で確認したアクセスキーとシークレットキーです。

図 3 : PA-API 5.0 Scratchpad > SearchItems > Common parameters
図 3 : PA-API 5.0 Scratchpad > SearchItems > Common parameters

画面をスクロールし、 Request parameters を入力します。

今回は keywords に 『リーダブルコード』 を検索してみます。

欲しいデータが決まっている場合は、 Resources をクリックして必要なものだけを選択することもできます。

今回は keywords のみ入力した状態で、 右下 「 Run request 」をクリックして PA−API を呼び出してみます。

図 4 : PA-API 5.0 Scratchpad > Response types
図 4 : PA-API 5.0 Scratchpad > Response types

すると、 図 4 のように、PA-API への問い合わせ結果が表示されました。

Response types の下にあるタブを切り替えることで、JSON や HTML のレスポンスをチェックすることができす。

図 5 : PA-API 5.0 Scratchpa > Code Snippets
図 5 : PA-API 5.0 Scratchpa > Code Snippets

更に画面をスクロールすると、図 5 Code Snippets があり、ここでは どのようなプログラムを動かしたか が把握できます。


移行に関しては、 PA-API 5.0 Scratchpad のを見ていけば半分は解決します。

  • Code Snippets
  • Response types

ステップ3: 必要な知識を得る

もう半分は、 レスポンス ( API から受け取る結果) がどう変わったか です。


レスポンスフォーマットについて、 PA-API 4.0 までは XML でしたが、 PA-API 5.0 からは取り回しがしやすい JSON に変わりました。

これは当然、レスポンスのパース処理に影響します。

また、結果の構造やキーなども変化があり、「ある情報が、新しい API のどこに、どのように詰まっているのか」は、ある程度じっくり見て把握する必要があるな、と感じました。


Product Advertising API 5.0 Documentation
PA-API 4.0 → PA-API 5.0マッピングガイド
https://webservices.amazon.com/paapi5/documentation/migration-guide/pa-api-40-to-50-mapping.html

ステップ4: PA-API 5.0を導入する

ステップ 3 でプログラムと、実レスポンスデータを入手し、ステップ 4 で新旧マッピングガイドをチェックし、お使いのプログラムに落とし込んでいきます。

プログラムが完成したら、デプロイして完了、という感じです。

このサイトでの PA-API 移行事例

当サイトは 静的サイトジェネレーターの Hugo を利用しています。

Hugo は静的、つまり「ページを開いた時に API を叩く」といったことはできないため、次のような手順で商品情報を表示しています。

  • PA-API で商品を検索し
  • 検索結果をパース、加工し、JSON ファイルを生成
  • Hugo のビルド時に JSON ファイルを読み込んで出力

今回の移行では次に手を入れました。

  • A. PA-API のリクエスト
  • B. レスポンスのパース、加工処理

上記どちらも、先に紹介した PA-API 5.0 Scratchpad を活用しました。

PA-API 5.0 Scratchpad
https://webservices.amazon.co.jp/paapi5/scratchpad/index.html

です。

リクエストは Scratchpad の Code Snippets に少しだけ手を加え、レスポンスは Response types をファイルに出力したものをトライアンドエラーで、直していきました。

レスポンスについてちょっとだけ

ItemsResult > Items 以下に複数の商品情報が入っています。

1 つ目の商品情報を取り出す場合は次のようにします。

1$json = json_decode($response, true);
2if (false === $json) {
3  throw new \Exception('Failed to decode JSON');
4}
5$item = $json['ItemsResult']['Items'][0];

主要なもの

  • 商品名は、 $item['ItemInfo']['Title']['DisplayValue'] に入る
  • 商品 URL は、 $item['ItemInfo']['DetailPageURL'] に入る
  • 画像は、 $item['Images']['Primary'] 以下に 3 サイズ分の情報が入る

画像は Small、Medium、Large の 3 サイズがあり、中画像の情報を取る場合は次のようにします。

1$mediumImage = $item['Images']['Primary']['Medium'];
2$mediumImageUrl = $mediumImage['URL'];
3$mediumImageWidth = $mediumImage['Width'];
4$mediumImageHeight = $mediumImage['Height'];

新 API になって

PA-API 5.0 に移行してみて、私は動的にこの API を呼び出しているわけではないため、速度的なメリットはあまり感じませんでした。

動的に都度呼び出すと、あっという間にリクエスト上限に達してしまいますしね。


今まで、 書籍 ISBN と その他 ASIN とでリクエストをちょっと変えていたのですが、新 API になってからは、乱暴かもしれませんが一本化できるため、その点楽になりました

本当のギリギリになってしまいましたが、無事移行ができホッとしました。