電子署名添付のAmazon APIを用いた書籍検索ツール
August 14, 2009 – 5:55 pm随分前になるが「アマゾン書籍DB検索をAjaxでやってみた」を書いた。ここで、アマゾンAPIを使って、ISBNを入力すると書籍データが出力される検索ツールを紹介しておいた。明日、8月15日からアマゾンAPIは電子署名を添付しないと動作しなくなる。ということで、この検索ツールも電子署名を添付したものに修正しておいた。このエントリーでは、修正版のソースを示しておいた。
ISBNからの書籍データの検索: 以前のエントリーと重複するが、ISBN値を(半角で)入力し、[Search]ボタンをクリックすると、該当する書籍のイメージとタイトル、著者などの書籍情報が出力される検索ツールを以下に掲げる。(たとえば、ISBN値として、4334751067を入力してみよう。
修正版のphpソース: 以下に、修正版のphpソース、SetBookByAmazon.phpを示す。動作に必要なJavaScriptなどについては「アマゾン書籍DB検索をAjaxでやってみた」を参照して欲しい。なお、SetBookByAmazon.phpには、電子署名添付に必要な二つの関数 canonical_Str()、get_Signature()が含まれている。これらの解説については、「アマゾンAPIの電子署名添付:日本語文字をURL-Encodeしておくことが必須」に記述している。
<?php
SetBookByAmazon($BookId,$BookCode ) {
require_once("./Book.php");
require_once("./Author.php");
define('KEYID','Your Key-ID placed here');
define('AssocTag','Your Associate-Tag placed here');
$aws_host = "ecs.amazonaws.jp";
$request = ''Service=AWSECommerceService'
. '&AWSAccessKeyId='.KEYID.'&Operation=ItemLookup'
. '&ResponseGroup=Large&Version=2008-08-19';
$request .= '&IdType=' . $BookCode . '&ItemId=' . $BookId;
$request .= "&Timestamp=" . str_replace('GMT','T',gmdate("Y-m-dTH:i:s")) . "Z";
$request = canonical_Str( $request );
$signature = get_Signature( $request, $aws_host );
$request = "http://" . $aws_host . "/onca/xml?" . $request . "&Signature=" . $signature;
$response = file_get_contents($request);
$parsed_xml = simplexml_load_string($response);
// Get AWS 判定
if( $IsValid != 'True' ) return -1;
//
$Item = $parsed_xml->Items->Item;
// Get Image URL
$Image_URL = $Item->MediumImage->URL;
// Get ASIN
$ASIN = $Item->ASIN;
// Get Book_Data
$Attributes = $Item->ItemAttributes;
$Binding = $Attributes->Binding;
$EAN = $Attributes->EAN;
$ISBN = $Attributes->ISBN;
$Pub_Date = $Attributes->PublicationDate;
$Price = $Attributes->ListPrice->Amount;
$Currency_cd = $Attributes->ListPrice->CurrencyCode;
$Publisher = $Attributes->Publisher;
$Title = $Attributes->Title;
$Pages = $Attributes->NumberOfPages;
if ( strlen($Pub_Date) == 7 ) $Pub_Date=$Pub_Date . '-00';
else if ( strlen($Pub_Date) == 4 ) $Pub_Date=$Pub_Date . '-00-00';
else if ( strlen($Pub_Date) < 4 ) $Pub_Date='0000-00-00';
$book = new Book();
$book->setIsbn($ISBN);
$book->setAsin($ASIN);
$book->setEan($EAN);
$book->setTitle($Title);
$book->setImage_url($Image_URL);
$book->setPubdate($Pub_Date);
$book->setPrice($Price);
$book->setPages($Pages);
$book->setPublisher($Publisher);
$book->setBinding($Binding);
$book->setCurrency_cd($Currency_cd);
$book->setPosition($BookId);
$author_name = array();
$ncr = 0;
foreach( $Attributes->Author as $Author_name ) {
$author_name[$ncr] = $Author_name;
// echo "author = " . $author . "\n";
$ncr = $ncr + 1;
}
foreach( $Attributes->Creator as $Creator ) {
$author_name[$ncr] = $Creator;
$ncr = $ncr + 1;
}
$author_array = array();
for ( $i=0; $i<sizeof($author_name); $i++ ) {
$author->setAuthor($author_name[$i]);
$author->setRole($author_name[$i]['Role']);
$author_array[] = $author;
}
$return_arguments = array();
$return_arguments[] = $book;
$return_arguments[] = $author_array;
return $return_arguments;
}
function canonical_Str( $request ) {
$req_split = array();
$req_split = split("&", $request);
for( $i=0; $i
関連ポスト:
- アマゾンAPIを活用した蔵書管理システム(2)
- アマゾンAPIを活用した蔵書管理システム(4)
- アマゾンAPIの電子署名添付:日本語文字をURL-Encodeしておくことが必須
- Amazon APIのRequestへの電子署名添付(PHP版)
- アマゾンAPIを活用した蔵書管理システム(1)
- アマゾンAPIを活用した蔵書管理システム(3)
- アマゾンの書籍データベースにphpでアクセスしてみた
- 書籍コードとアマゾンAPIによる検索
- PHPのセキュリティを高めるための個人的メモ(補足)
- 「Javascriptを学習しなくちゃ」ということで・・・・
1 Trackback(s)