いつまでもAmazonのアフリエイト作成ツールに頼ってリンクを作成するのも何だかなぁと思ったので、APIを叩いて結果を取得してみた。色々とやり方はあるだろうけれども、PHPでやる場合にはPEARライブラリの「Services_Amazon」を利用すると簡単。


0. 準備

APIを利用するには、「アクセスキーID」と「アクセスシークレットキー」の2つが必要です。
この辺を参考にアカウントを作成して取得。

Access Key IDの取得 - サービス利用の準備 - Amazon Web サービス

デザインが変わってるけど大体解ると思います。

ちなみにこれはAmazonオンラインショップのユーザーアカウントや、アフリエイトのアカウントとは違うので、それらとは別に取得しなくてはなりません。また既にAmazonでアフリエイトをやってる人は、メールアドレスを揃えないといけないらしいです。

1. ライブラリのインストール

適当に、こんな感じで。

pear install Services_Amazon-beta

まだbeta版なので、「-beta」をお忘れ無く。


2. サンプルコード(商品検索)

ItemSearchメソッドを使います。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$response = $amazon->ItemSearch('All', array('Keywords' => 'イカ娘'));
var_dump($response);

結果は配列に格納されて返ってきます。

array
  'Request' => 
    array
      'IsValid' => string 'True' (length=4)
      'ItemSearchRequest' => 
        array
          'Condition' => string 'New' (length=3)
          'DeliveryMethod' => string 'Ship' (length=4)
          'Keywords' => string 'イカ娘' (length=9)
          'MerchantId' => string 'Amazon' (length=6)
          'ResponseGroup' => 
            array
              ...
          'ReviewSort' => string '-SubmissionDate' (length=15)
          'SearchIndex' => string 'All' (length=3)
  'TotalResults' => string '243' (length=3)
  'TotalPages' => string '25' (length=2)
  'Item' => 
    array
      0 => 
        array
          'ASIN' => string 'B00522PHH2' (length=10)
(...)

APIの返答そのまま(XMLで返ってきます)が欲しい場合には、リクエストのあと、これで取得できます。

$rawResult = $amazon->getRawResult()



3. サンプルコード(特定の商品を取得)

ItemLookupメソッドを使います。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$response = $amazon->ItemLookup('B00522PHH2');
var_dump($response);

結果は商品検索と同様に配列に格納されて返ってきます。

array
  'Request' => 
    array
      'IsValid' => string 'True' (length=4)
      'ItemLookupRequest' => 
        array
          'Condition' => string 'New' (length=3)
          'DeliveryMethod' => string 'Ship' (length=4)
          'IdType' => string 'ASIN' (length=4)
          'MerchantId' => string 'Amazon' (length=6)
          'OfferPage' => string '1' (length=1)
          'ItemId' => string 'B00522PHH2' (length=10)
          'ResponseGroup' => 
            array
              ...
          'ReviewPage' => string '1' (length=1)
          'ReviewSort' => string '-SubmissionDate' (length=15)
          'VariationPage' => string 'All' (length=3)
  'Item' => 
    array
      0 => 
        array
          'ASIN' => string 'B00522PHH2' (length=10)
(...)

XMLが欲しい時も商品検索と同じ。

$rawResult = $amazon->getRawResult()




Tipsその1. 日本のAmazonでの結果が欲しいとき

Services_Amazonのデフォルトの地域はamazon.comになっているのでこれを設定してやる必要があります。メソッドは、「setBaseUrl()」で、以下のように設定すると日本のAmazonからの結果になります。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$amazon->setBaseUrl('http://ecs.amazonaws.jp/onca/xml');
$response = $amazon->ItemSearch('All', array('Keywords' => 'イカ娘'));
var_dump($response);



Tipsその2. 商品の詳細情報が欲しいとき

オプション「ResponseGroup」に、「ItemAttributes」を設定します。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$amazon->setBaseUrl('http://ecs.amazonaws.jp/onca/xml');
$response = $amazon->ItemSearch('All', array('Keywords' => 'イカ娘', 'ResponseGroup' => 'ItemAttributes'));
var_dump($response);

同様に画像が欲しいときは「Images」、売り上げ順位が欲しいときは「SalesRank」を指定します。
複数指定するときはカンマで区切って指定。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$amazon->setBaseUrl('http://ecs.amazonaws.jp/onca/xml');
$response = $amazon->ItemSearch('All', array('Keywords' => 'イカ娘', 'ResponseGroup' => 'ItemAttributes, Images, SalesRank'));
var_dump($response);



Tipsその3. 結果のソート

商品カテゴリとして「All」「Blends」以外を指定した場合に利用できるそうです。

例えば、「Books」カテゴリで「いしいひさいち」を検索して発売日の新しい順に並べるとこうなります。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$amazon->setBaseUrl('http://ecs.amazonaws.jp/onca/xml');
$response = $amazon->ItemSearch('Books', array('Keywords' => 'いしいひさいち', 'Sort' => 'daterank'));
var_dump($response);



Tipsその4. 結果をキャッシュ

「setCache」メソッドと「setCacheExpire」メソッドを使います。

require_once 'Services/Amazon.php';

$amazon = new Services_Amazon('アクセスキーID', 'アクセスシークレットキー', 'アソシエイトID');
$amazon->setBaseUrl('http://ecs.amazonaws.jp/onca/xml');
$amazon->setCache('file', array('cache_dir' => 'cache/')));
$amazon->setCacheExpire(3600);
$response = $amazon->ItemSearch('Books', array('Keywords' => 'いしいひさいち', 'Sort' => 'daterank'));
var_dump($response);

あ、PEAR::Cache必須です。Cache_Liteでは動きません。



その他の情報

基本的にはAmazonのドキュメントを眺めれば解りますが、解りづらければこちらを。

Amazon Web サービス入門(Product Advertising API)

用途別に解りやすくまとまっています。


Services_Amazonのドキュメントはこちら。

Services_Amazon 0.8.0

参考になるか解りませんが。