前回、 PA-API v5 移行についてまとめました。

上記では PA-API 5.0 Scratchpad を使って SearchItems のリクエスト実施について記載しましたが、当サイトで利用しているのは GetItems のみのため、そのあたりについてまとめます。

このサイトでの PA-API 使用事例

当ブログでは次のようにアソシエイトのリンクを生成しています。

  • Amazon サイトで商品を眺める
  • ASIN / ISBN をチェック
  • PA-API 用の自社ツールで ASIN / ISBN を検索
  • JSON に書き出し
  • Hugo で表示

このような手順にしている理由は 2 つあります。

静的サイトジェレレーター

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

Hugo は「ページを開く時に API を叩く」といったことが得意ではないのです。

まあそもそもとして、動的に API リクエストするのは、 静的であるというメリット がなくなってしまいますしね。

API リクエストの上限

PA-API はリクエスト回数に上限が儲けられています。

初期リクエスト可能数は 1日 あたり 8,640 リクエストです。
この数値は 1 分間に 1 リクエストの頻度のアクセスがあると、 1 日で上限に達する計算です。

もし上限に達して、コンテンツがでなかったり、エラーが見えてしまったりするのは明らかに良くありません。

この制限がある以上、都度リクエストするのは難しく、レスポンスをキャッシュするなりして節約する仕組みが必要なのかなーと考えています。

PA-API v5 の GetItems にリクエストする

では GetItems にリクエストを行います。

前回記事でもご紹介した PA-API 5.0 Scratchpad を利用します。

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

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

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

すると、各種パラメーターの入力欄が表示されます。

最上部の Common parameters で 認証情報と Partner Tag を済ませ、画面をスクロールして 図 2、 Request parameters を入力します。

図 2 : PA-API 5.0 Scratchpad > GetItems > Request parameters
図 2 : PA-API 5.0 Scratchpad > GetItems > Request parameters

GetItems 固有の必須パラメーターは ItemIds くらいですね。

ここに、あらかじめ調べておいた ASIN を入力し、 右下 「 Run request 」をクリックして PA−API を呼び出します。


すると、次に結果が入ってくるため、それらをコピーして移植すれば良いです。

  • Response types
  • Code Snippets

ISBN も検索可能

GetItems では書籍の ISBN を入力した場合に、しっかり書籍情報がかえってきます。

ただし、対応しているのは ISBN 10 のみで、 ISBN 13 はエラーとなりました。

GetItems のバニラ実装

SearchItes と GetItems では、リクエストもレスポンスも共通部分が多く、あまり手を入れるところはありません。

SDK を利用せず バニラ実装する場合、 PA-API 5.0 Scratchpad の Code Snippets を利用すればほぼ OK ですね。

一つ、 Payload の生成がベタ書きのため、変更しやすい形に修正したさがあります。


公式ではバニラ実装のサンプル掲載があります。

Product Advertising API 5.0 Documentation
Integrating without SDK > PHP
https://webservices.amazon.com/paapi5/documentation/without-sdk.html#php

上記は クラスを使った Payload の生成を行っていますが、 SearchItems を呼び出しているため、 GetItems に向ける修正箇所を記載します。

修正箇所

Payload 生成

  • 修正前
18$searchItemRequest = new SearchItemsRequest ();
19$searchItemRequest->PartnerType = "Associates";
20// 中略
21$path = "/paapi5/searchitems";
22$payload = json_encode ($searchItemRequest);
  • 修正後
18$getItemsRequest = new GetItemsRequest ();
19$getItemsRequest->PartnerType = "Associates";
20// Put your Partner tag (Store/Tracking id) in place of Partner tag
21$getItemsRequest->PartnerTag = <PARTNER_TAG>;
22$getItemsRequest->ItemIds = [<ASIN>];
23$getItemsRequest->Resources = ["Images.Primary.Small","ItemInfo.Title","Offers.Listings.Price"];
24$host = "webservices.amazon.co.jp";
25$path = "/paapi5/getitems";
26$payload = json_encode ($getItemsRequest);

x-amz-target リクエストヘッダ

  • 修正前
38$awsv4->addHeader ('x-amz-target', 'com.amazon.paapi5.v1.ProductAdvertisingAPIv1.GetItems');
  • 修正後
38$awsv4->addHeader ('x-amz-target', 'com.amazon.paapi5.v1.ProductAdvertisingAPIv1.GetItems');

SearchItemsRequest クラス

  • 修正前
64class SearchItemsRequest {
65    public $PartnerType;
66    public $PartnerTag;
67    public $Keywords;
68    public $SearchIndex;
69    public $Resources;
70}
  • 修正後
64class GetItemsRequest {
65    public $ItemIds;
66    public $Resources;
67    public $PartnerType;
68    public $PartnerTag;
69}

SearchItemsRequest クラスをそのまま使うと、 GetItems で受け取れないパラメーターがあって怒られてしまいます。

丁寧にクラスまで作る必要はないのですが、クラスにしたほうがかっこいいのでね。

補足

ItemIds

Item ID は一度に 10 点までのリクエストが可能です。

風数にする場合は次のように配列に追加していきます。

1$getItemsRequest->ItemIds = [
2    'ASIN 1',
3    'ASIN 2',
4];

Resources

Resources も同様に、必要なものを適宜、配列に追加、削除してください。

当ブログでは次のようにしています。

1$getItemsRequest->Resources = [
2    'Images.Primary.Medium',
3    'ItemInfo.ByLineInfo',
4    'ItemInfo.ContentInfo',
5    'ItemInfo.Features',
6    'ItemInfo.Title',
7];

指定できるリソースは多数あります。
詳細は次をご覧ください。

Product Advertising API 5.0 Documentation
API Reference > Operations > GetItems > Resources Parameter
https://webservices.amazon.com/paapi5/documentation/without-sdk.html#php

上記活用していただければ嬉しいです。