【超簡単】Amazon Product Advertising APIを使って商品検索するPHPのコード

PHP プログラミング

Amazonの商品検索APIを使ってみようと思ったら、Amazonアソシエイトのサイトにリンクされてるドキュメントが古くて混乱しました。

最新のドキュメント参照しつつ、Amazonの商品検索APIをたたくPHPのコードを書いてみます。

結論としては、他の人が公開しているライブラリを使ってしまうのが楽でした。

Amazon Product Advertising API最新ドキュメントの場所

2010年頃のドキュメントによれば、APIのGETパラメタを手で書き換えるだけで使えていたようですが、最近は署名を動的に計算してパラメタに付与する形になっています。

2018年時点の最新ドキュメントは以下にあります。
https://docs.aws.amazon.com/ja_jp/AWSECommerceService/latest/DG/AnatomyOfaRESTRequest.html

リクエストURIから署名を生成してクエリに付与するくだりがメンドクサそう。

誰かライブラリ作ってるのでは?と思ったらカッコいいライブラリが公開されてました。感謝しつつ使わせてもらいます。

apai-ioをインストール

apai-ioを使わせてもらいます。
https://github.com/Exeu/apai-io

AmazonのAPIを呼び出すときのメンドクサイ部分が実装されてるので、少しのコードで簡単にAPIをたたく事ができます。

apai-ioインストールのためcomposer.jsonを作ります。

{
  "require": {
    "exeu/apai-io": "~2.0"
  }
}

composer update でインストール完了。

apai-ioの使用例サンプルコード

GitHubに書いてあるサンプルコードを参考に、自分の手元で動くコードを書きます。

<?php

require_once "vendor/autoload.php";

use ApaiIO\Configuration\GenericConfiguration;
use ApaiIO\Operations\Search;
use ApaiIO\ApaiIO;

$conf = new GenericConfiguration();
$client = new \GuzzleHttp\Client();
$request = new \ApaiIO\Request\GuzzleRequest($client);

$conf
  ->setCountry('co.jp')
  ->setAccessKey(YOUR_ACCESS_KEY)
  ->setSecretKey(YOUR_SECRET_KEY)
  ->setAssociateTag(YOUR_ASSOCIATE_TAG)
  ->setRequest($request)
  ->setResponseTransformer(new \ApaiIO\ResponseTransformer\XmlToArray());

$apaiIo = new ApaiIO($conf);
$search = new Search();
$search->setCategory('DVD');
$search->setActor('Bruce Willis');
$search->setKeywords('Die Hard');

$formattedResponse = $apaiIo->runOperation($search);

var_dump($formattedResponse);

これだけです。

setCountry() には自分の国のドメインを指定します。日本のアソシエイトIDを取得している場合は「co.jp」になります。

setAccessKey() 、setSecretKey() 、setAssociateTag() にはそれぞれ自分のアカウントで取得したAmazon Product Advertising APIのアクセスキー、シークレットキー、アソシエイトタグを指定します。

実行してみます。

>php apai.php
(中略)
  ["Items"]=>
  array(2) {
    ["Request"]=>
    array(2) {
      ["IsValid"]=>
      string(4) "True"
      ["ItemLookupRequest"]=>
      array(4) {
        ["IdType"]=>
        string(4) "ASIN"
        ["ItemId"]=>
        string(10) "B001TP8L3S"
        ["ResponseGroup"]=>
        string(5) "Large"
        ["VariationPage"]=>
        string(3) "All"
      }
    }
    ["Item"]=>
    array(16) {
      ["ASIN"]=>
      string(10) "B001TP8L3S"
      ["ParentASIN"]=>
      string(10) "B07712SV67"
      ["DetailPageURL"]=>
      string(322) "https://www.amazon.co.jp/%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%A2%E3%83%AB%E3%83%88-%E3%82%A6%E3%82%A4%E3%82%B9%E3%82%AD%E3%83%BC-%E3%83%9C%E3%82%A6%E3%83%A2%E3%82%A2-12%E5%B9%B4-700ml/dp/B001TP8L3S?psc=1&SubscriptionId=YOUR_ACCESS_KEY&tag=YOUR_ASSOCIATE_TAG&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B001TP8L3S"
      ["ItemLinks"]=>
      array(1) {
        ["ItemLink"]=>
        array(4) {
          [0]=>
          array(2) {
            ["Description"]=>
            string(15) "Add To Wishlist"
            ["URL"]=>
            string(188) "https://www.amazon.co.jp/gp/registry/wishlist/add-item.html?asin.0=B001TP8L3S&SubscriptionId=YOUR_ACCESS_KEY&tag=YOUR_ASSOCIATE_TAG&linkCode=xm2&camp=2025&creative=5143&creativeASIN=B001TP8L3S"
          }
          [1]=>
          array(2) {
            ["Description"]=>
            string(13) "Tell A Friend"
            ["URL"]=>
            string(157) "https://www.amazon.co.jp/gp/pdp/taf/B001TP8L3S?SubscriptionId=YOUR_ACCESS_KEY&tag=YOUR_ASSOCIATE_TAG&linkCode=xm2&camp=2025&creative=5143&creativeASIN=B001TP8L3S"
          }
          [2]=>
          array(2) {
            ["Description"]=>
            string(20) "All Customer Reviews"
            ["URL"]=>
            string(161) "https://www.amazon.co.jp/review/product/B001TP8L3S?SubscriptionId=YOUR_ACCESS_KEY&tag=YOUR_ASSOCIATE_TAG&linkCode=xm2&camp=2025&creative=5143&creativeASIN=B001TP8L3S"
          }
(以下略)

いい感じに検索結果が取れました。
(DVDを検索したつもりでしたが、何故かウィスキーが見つかってしまっているのは気にしない事にします。)

これでAmazonの商品情報や画像を取得し、自分のアプリケーションに利用できるようになりましたね。

今回は以上ですん。

コメント/ピンバック

  1. […] 【超簡単】Amazon Product Advertising APIを使って商品検索するPHPのコード最新のドキュメント参照しつつ、Amazonの商品検索APIをたたくPHPのコードを書いてみます。 結論としては、他の人が公開 […]

タイトルとURLをコピーしました