本の情報をISBNを使ってアマゾンから取得する方法
アマゾンで本の情報をISBNを使って取得する方法の紹介です。
先日画像からISBNの検出を行いましたが、今回はそのISBNコードを使用して、実際のアイテム情報をアマゾンから取得します。
ソースコードはこちら
下記ページのRubyで書かれたものをPHPに書きなおした感じです。
Amazon Product Advertising APIでISBN検索してみた - idesaku blog
index.php
<?php //パラメータ amazon web service よりAPIKEYを取得しておきます define(AWS_ACCESS_KEY_ID, 'XXXXXXXXXXXXXXXXXXXX'); define(AWS_SECRET_ACCESS_KEY, 'XXXXXXXXXXXXXXXXXXXX'); define(AWS_REQUEST_DOMAIN, 'webservices.amazon.co.jp'); define(AWS_REQUEST_PATH, '/onca/xml'); //ISBN13⇒10の変換 $isbn10 = ISBNTran( 9784777515783 ); //投げる変数類設定 $request_param = array( 'Service' => 'AWSECommerceService' , 'AWSAccessKeyId' => AWS_ACCESS_KEY_ID , 'Operation' => 'ItemLookup' , 'ItemId' => $isbn10 , 'IdType' => 'ISBN' , 'SearchIndex' => "Books" , 'Timestamp' => date('Y-m-d'). 'T'. date('H:i:s'). 'Z', 'ResponseGroup' => 'Small' ); //クエリをURLエンコードして、変数名でソート $request_param = array_map ('rawurlencode', $request_param); ksort($request_param); //1行のクエリに加工 $request_queries = array(); foreach ($request_param as $k => $v){ $request_queries[] = "{$k}={$v}"; } $request_query = implode('&', $request_queries); //Signatureの作成 $aws_signature_base = "GET\n"; $aws_signature_base .= AWS_REQUEST_DOMAIN. "\n"; $aws_signature_base .= AWS_REQUEST_PATH. "\n"; $aws_signature_base .= $request_query; $aws_signature = urlencode(base64_encode(hash_hmac('sha256', $aws_signature_base, AWS_SECRET_ACCESS_KEY, TRUE))); //リクエストURLの作成 $aws_signed_url = 'http://'. AWS_REQUEST_DOMAIN. AWS_REQUEST_PATH. "?{$request_query}&Signature={$aws_signature}"; //アマゾンへリクエスト header ("Content-Type: text/xml; charset=UTF-8"); echo file_get_contents( $aws_signed_url ); exit; ?>
ISBN13⇒10の変換は「太のうぇぶでぶ » Blog Archive » PHPでISBN13とISBN10の相互変換をする。」を使用させていただきました。
function ISBNTran ($ISBN) { if (strlen($ISBN) == 10) { //ISBN10からISBN13への変換 $ISBNtmp = "978" . $ISBN; $sum = 0; for ($i = 0; $i < 12; $i++) { $weight = ($i % 2 == 0 ? 1 : 3); $sum += (int)substr($ISBNtmp, $i, 1) * (int)$weight; } //チェックディジットの計算 $checkDgt = (10 - $sum % 10) == 10 ? 0 : (10 - $sum % 10); return "978" . substr($ISBN, 0, 9) . $checkDgt; } elseif (strlen($ISBN) == 13) { //ISBN13からISBN10への変換 $ISBNtmp = substr($ISBN, 3, 9); $weight = 10; $sum = 0; for ($i = 0; $i < 9; $i++) { $sum += (int)substr($ISBNtmp, $i, 1) * $weight; $weight--; } //チェックディジットの計算 if ((11 - $sum % 11) == 11) { $checkDgt = 0; } elseif ((11 - $sum % 11) == 10) { $checkDgt = "X"; } else { $checkDgt = (11 - $sum % 11); } return substr($ISBN, 3, 9) . $checkDgt; } }
解析
取得したxmlファイルの解析はpearの「XML/Unserializer.php」が大変便利です。
下記の様にしてインストールを行います。
$ pear channel-update pear.php.net $ pear upgrade-all $ pear install -f XML_Serializer
使い方は以下を参照してくださいませ。
PHPを便利にする10個のPEARライブラリ - PHP,MySQL,Flexな日々+イラストとか
xmlを配列に変換できますので、あとはMySQLと連携したり、電子書籍化したPDFファイルをフォルダ管理したりできるかと思います。
参考リンク
参考書
PHPによるWebアプリケーションスーパーサンプル活用編 第2版
- 作者: KJ,田中ナルミ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/07/12
- メディア: 大型本
- 購入: 2人 クリック: 38回
- この商品を含むブログ (11件) を見る