以前、Amazon APIの使い方!としてエントリー記事を書きましたが、Amazonでの仕様が変わり2019年12月1日から新しいバージョン5.0のPA-API(Product Advertising API)と移行します。
これに伴い、2019年11月30日までに移行が完了していない場合は現在のPA-APIは使えなくなるということです…
Product Advertising API (以下PA-API)の新しいバージョン(PA-API v5)についてお知らせいたします。
PA-API v5への移行を2019年11月30日までに実施しなかった場合、現在のPA-APIはご利用をいただけなくなります。
引用 : PA-API v5移行のご案内
※ 自分は「Amazon API」と呼んでいましたが、正確にはPA-APIなので、今後はPA-APIに統一します
変更方法としては、以下の2ステップです。
ステップ1: PA-APIのアクセスキーはアソシエイト・セントラルで発行されたものをご利用いただく必要があります。
ステップ2: 日本語版のPA-API v5移行ガイドをご確認ください。移行プロセスを実施しても、2019年11月30日までは引き続き現行APIをご利用いただけます。
基本的には、手順に沿っていけば対応できるので、(当サイトでも一部解説しますが、)公式サイトの手順を見ながら進めて見てください!
→ PA-API v5移行ガイド

目次
PA-API v5.0での大きな変更点
実際に使ってみたのですが、大きな変更ポイントとしては、以下の3点だと感じました。
- パラーメータの種類が変更
- パラーメータの設定が直感的に行える
- 返してくれるデータがJSON形式
1、PA-API v4.0からパラメーターが変わっています。ソースコードはまるごと変更しないといけません…。
2、そして、今までのPA-APIはリクエストURLを作成するのが(自分のスキルでは)めちゃくちゃ面倒でしたが、、、PA-API v5.0では、Amazon側でリクエストURLを作成するクラスを色んなプログラミング言語で用意してくれていて、ほぼブラックボックス的にパラメーターの値だけを指定するだけでリクエストURLの取得から出力まで行えるようになっています。
3、また、JSONが全盛期?の時代に、いつまでXMLを続けるんだろう…と思っていましたが、このタイミングでJSONに切り替わりました(XMLでの取得も可能です)
PA-API v5.0の使い方
新しいアクセスキーを取得
以下のページから新しいアクセスキー(とシークレットキー)を取得し直す必要があります。
→ アソシエイト・セントラルのPA-APIページ
アクセスキーは、2つまで取得可能です。また、作成時にアクセスキーとシークレットキーの記載されたCSVファイルがダウンロードされます。シークレットキーはこのCSVファイルにしか情報が残らないのでちゃんと保存しておくようにしましょう。
ソースコードをダウンロード
PA-API v5.0では、サンプルのソースコードが豊富に揃っています。わたしのような、めっちゃ表面的にしかプログラミングが分かっていない人でも実装できるような親切設計です…。
ダウンロードは以下のページから行えます。
→ Using SDK · Product Advertising API 5.0
わたしはPHPを使っているので、「paapi5-php-sdk-and-samples」というサンプルをダンロードしました。
※ ソースコードのバージョン1.0.0時点
ダウンロードしたフォルダを見ると、以下のような4つのファイルがあります。これは、バージョン5.0のオペレーションに対応しているファイルになります。
オペレーションとはリクエスト方法みたいなイメージでいいかと思いますが、PA-API v5.0では、4パターン(GetBrowseNodes、GetItems、GetVariations、SearchItems)のオペレーションが用意されており、それぞれのサンプルソースを確認しがら実行できるというサンプルとなっているという訳ですね。
アクセスキー、シークレットキー、アソシエイトタグでサンプルソースを動かす
試しに、GetItems.phpを触ってみようと思います。まずは、ダウンロードしたファイルをまるごとPHPが動く環境に移動してあげます。ローカルでPHPを動かす環境を用意するなら、Windowsの方はXAMPP、Macの方はMAMPがおすすめです。
書き換えるのは見出しにもなっている、アクセスキー、シークレットキー、アソシエイトタグの3点ですね。おそらく64行目あたり。
ホストとリージョンを日本に変更してあげます(ここを変更しないとToo Many Requestsのエラーが止まらなかった…) 具体的には、以下の部分の記述を変更してあげます。
コピー// $config->setHost('webservices.amazon.com');
// $config->setRegion('us-east-1');
$config->setHost('webservices.amazon.co.jp');
$config->setRegion('us-west-2');
ホストとリージョンについては、
「Common Request Parameters · Product Advertising API 5.0」で詳しく紹介されています。
最後に、、、サンプルで記載されている商品がなぜか存在しなくて怒られるので、、、好きな商品のASIN番号に変更してあげましょう。
コピー// $itemIds = array("059035342X", "B00X4WHP55", "1401263119");
$itemIds = array("B075LCKFLL", "B00M0ESXUI");
ここまで修正して実行してみると、以下のような結果となります。ソースを見てもらうと、さっき指定した2つのASIN番号のアイテムの情報が返っている処理であることが分かります。
(一応、ローカル環境での実行URLとしては、ファイルの格納場所などで変わってきますが次のような感じです。http://localhost/amazon/GetItems.php)
JSON以外にもたくさんecho
で表示されているので、JSONだけ返したい場合は他のechoは削除(コメントアウト)してあげるといいかもしれません。JSONを取得している部分は、$getItemsResponse = $apiInstance->getItems($getItemsRequest);
で、この変数の出力以外は、肉付け的なコメント部分となります。
成果の出ているアソシエイトタグがないと動かない…
PA-API v4.0からお使いの方はご存知かと思いますが、念のための共有として、PA-APIは、成果の出ているアソシエイトタグがないと動かせません。
2019/01/23から、成果の出ていないアソシエイトタグではPA-APIが利用できなくなりました。これはPA-APIのバージョンが5.0に変わっても変わらないであろう仕様なので、PA-APIを利用したい方は、まずは売上実績をまず作ることが最優先となります…
売上実績の発生がない場合は、PA-APIの利用開始はできません。
また、発送済み商品売上が過去30日以内に発生していない場合、PA-APIをご利用いただけなくなる恐れがございます。
→ 2019/01/23 – Product Advertising API 利用ポリシーの変更について
実装方法の整理
PA-API v5.0の実装方法を整理しておきます(主に自分のためでもあったり…)
Web APIは基本的には、リクエストとレスポンスの2つから成り立っています。
リクエストの作成方法
リクエストとは、Amazonへ「〇〇のデータをください!」とお願いする時の「〇〇」の部分です。このリクエストを管理しているのが、「GetItemsRequest
クラス」です。
この付近のサンプルコードを見ると、以下のように何やらset
していることが分かります。
コピー$getItemsRequest = new GetItemsRequest();
$getItemsRequest->setItemIds($itemIds);
$getItemsRequest->setPartnerTag($partnerTag);
$getItemsRequest->setPartnerType(PartnerType::ASSOCIATES);
$getItemsRequest->setResources($resources);
例えば、「GetItems」のオペレーションであれば、以下の「Request Parameters」と一致していることが分かるはずです。
→ GetItems · Product Advertising API 5.0
リンク先のパラメーターの値と説明を参考にしながら、取得した情報のリクエストを作っていくような流れになります。
レスポンスのカスタマイズ
レスポンスとは、JSONで何のデータを返してもらうかといったものです。タイトルやURLはもちろんかと思いますが、その他、画像や価格や関連商品など、Amazonにリクエストした商品に対して、どういった情報を付与してもらうかはこちらでカスタマイズできます。
それが、リクエストパラメーターとして用意されいてる「Resources」になります。サンプルコードだと以下のような記述となっています(色々省きました…)
コピーconst ITEM_INFOTITLE = 'ItemInfo.Title';
const OFFERSLISTINGSPRICE = 'Offers.Listings.Price';
$resources = array(
GetItemsResource::ITEM_INFOTITLE,
GetItemsResource::OFFERSLISTINGSPRICE);
$getItemsRequest->setResources($resources);
上記の例では、ItemInfo.Title
とOffers.Listings.Price
をリクエストしているという形です。setResources
に何を指定できるかは以下のドキュメント内に記載されているので参考にしてみてください。
→ GetItems・Product Advertising API 5.0
おわり
ものすごい駆け足で、PA-API v5.0の使い方をざっくりと紹介していきました。基本的にはサンプルソース内を辿りながら理解していく感じになるかと思います。
とはいえ、ブラックボックス的にプラグラミング知識が少ない方でも割と使いやすいような仕組みになったのかなとも思いました。
いずれにしても2019年11月30日までの移行は必須のため、まだ対応していない方はすぐにでも準備を始めたほうがいいかもしれません…。