楽天ウェブサービスが安定しないこともあり(新規デベロッパーIDの発行を停止したようですね)、Amazon を併用するようにしたのですが、せっかくなので、新しいことを試してみようと、PEAR Services_Amazon を使ってみることにしました。書籍検索の場合は、以下のような感じです。
require_once 'Services/Amazon.php'; require_once 'Cache.php'; $access_key_id = '(公開アクセスキー)'; $secret_access_key = '(秘密アクセスキー)'; $associate_tag = '(アソシエイトタグ)'; $amazon = new Services_Amazon($access_key_id, $secret_access_key, $associate_tag); $amazon->setCache('file', array('cache_dir' => '(キャッシュの保存先)')); $amazon->setCacheExpire(3600); // 秒数で指定 $amazon->setLocale('JP'); $options = array(); $options['ResponseGroup'] = 'Medium'; //取得したい情報 $options['Keywords'] = '検索したいキーワード'; $options['Sort'] = 'salesrank'; $result = $amazon->ItemSearch('Books', $options); if (PEAR::isError($result)) { echo $result->message; } else { foreach($result['Item'] as $item) { $ItemData[] = array( 'ImageURL' => $item["SmallImage"]["URL"], 'DetailPageURL' => $item["DetailPageURL"], 'Title' => $item["ItemAttributes"]["Title"], 'Price' => $item["ItemAttributes"]["ListPrice"]["FormattedPrice"] ); } }
これで、$ItemData の中に商品データが入るので、適宜加工して表示するような形になります。ちょっと変わったこととしては、キャッシュを使うことによって、同じリクエストを連続して行わないように工夫をしています。この機能を使うためには、Services_Amazon のほかに、Cache のパッケージも必要となります(Cache_Lite ではないので注意)。
パッケージのドキュメントもクラスのリファレンスしかないため、取っつきにくいですが、電子署名認証を自動でやってくれたり、結果を連想配列で返してくれたりと、かなり使い勝手がよいので、おすすめです。他にも、複数のキーワードについてひとつのリクエストで処理する doBatch メソッドや、複数の操作をひとつのリクエストで処理する doMultiOperation メソッドなども便利だと思います。