楽天ウェブサービスが安定しないこともあり(新規デベロッパー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 メソッドなども便利だと思います。
