Amazon Web Servicesを使ってISBN-13からASINを取得するPHPプログラム
2007-01-23でPerl版を書いていらっしゃったので、PEAR::Services_Amazon 0.7.0を使ってざっと作ってみました。ISBNの値以外、やっていることはPerl版と同じです。最後の表示部分がダメダメです(^^;が、「PEAR::Service_Amazonの使い方の簡単な例」ということで。一応、PHP4.4.4、5.2.0で動作します。
<?php ini_set('mbstring.internal_encoding', 'utf-8'); ini_set('mbstring.script_encoding', 'utf-8'); error_reporting(E_ALL); require_once 'Services/AmazonECS4.php'; define('ACCESS_KEY_ID', 'xxxxxxxxxxxxxxxxx'); define('ASSOC_ID', 'xxxxxxxxx'); ?> <?php /** * 2009年8月15日以降、全てのリクエストに対して Secret Access Key を使った * 署名認証が必要になります * @see http://d.hatena.ne.jp/p4life/20090510/1241954889 */ $service = new Services_AmazonECS4(ACCESS_KEY_ID, ASSOC_ID); $service->setLocale('JP'); $service->setVersion('2007-01-17'); $id = '978-4798015163'; $options = array(); $options['IdType'] = 'ISBN'; $options['SearchIndex'] = 'Books'; $response = $service->ItemLookup(str_replace('-', '', $id), $options); if (PEAR::isError($response)) { die('データの取得に失敗しました:' . $response->getMessage()); } if (!isset($response['Item'][0])) { die('データがありません'); } $item = $response['Item'][0]; ?> ISBN: <?php echo $id; ?><br> ASIN: <?php echo $item['ASIN']; ?><br> Title: <?php echo $item['ItemAttributes']['Title']; ?><br> Author: <?php echo join(' ', $item['ItemAttributes']['Author']); ?>
「簡単だろう」とタカをくくっていましたが、2007-01-23で使われているAPIのバージョンがPEAR::Services_Amasonと異なっていたため、setVersionメソッドを使ってバージョンを変更しないとIdTypeに'ISBN'を指定できませんでした。PEAR::Services_Amason 0.7.0のデフォルトは「2005-10-05」です。使っているAPIについてはhttp://developer.amazonwebservices.com/connect/entry.jspa?externalID=614&categoryID=19を当たってください。
あと、ISBN-13に指定する値は「ハイフン抜き」でないとダメです。今回はstr_replace関数で置換してます。これにしばらく悩んだことは秘密です ;-)
追記(2009/06/17 12:20)
2009年8月15日以降、全てのリクエストに対して Secret Access Key を使った署名認証が必要になります。
これの対応については、id:p4lifeさんのエントリが非常に参考になります。
名称変更にともない、Product Advertising API にリクエストを送信いただく都度、認証のための電子署名を含めていただくことが必要になります。この変更は、2009年5月11日より3ヶ月の間の移行期間の後、2009年8月15日には、Product Advertising API へ送信されるリクエストは全て認証されることとなり、認証されない場合、リクエストは処理されなくなります。