アマゾンを利用してISBNコード検索を行う

 アマゾンのサービスではISBNコード(ASIN)で書籍の検索が可能です。クエリーでOperation=ItemLookupを指定し、ItemIdでISBNコードを指定すると、該当する書籍に関するXMLデータが返されます。見つからない場合でもXMLが返されます。以下のサンプルでは書籍が見つからない場合はタグが存在しないことを使用して、書籍の有無を調べています。(サンプルを実行する

●CGI (Ruby 1.8.4)
(■の部分はアクセスキーID、▲の部分はアソシエイトIDを指定してください) #!/usr/local/bin/ruby
require "cgi-lib"
input = CGI.new
asin = input["asin"]
print "Content-type: text/xml\n\n"
fh = open("| curl 'http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=■&AssociateTag=▲&Operation=ItemLookup&ItemId="+asin+"&ResponseGroup=Medium'")
while !fh.eof
print fh.gets
end
fh.close


●スクリプト
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>ISBN (ASIN) 検索</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
txt = "";
function amazonSearch()
{
asin = $("ISBN").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","amazon.rb?asin="+asin+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = txt = bookList(httpObj.responseXML) + txt;
}
}
function bookList(xml)
{
if (xml.getElementsByTagName("Title").length > 0)
{
bookTitle = xml.getElementsByTagName("Title")[0].childNodes[0].nodeValue;
bookLink = xml.getElementsByTagName("DetailPageURL")[0].childNodes[0].nodeValue;
bookAuthor = xml.getElementsByTagName("Author")[0].childNodes[0].nodeValue;
bookPublisher = xml.getElementsByTagName("Publisher")[0].childNodes[0].nodeValue;
return '<a href="'+bookLink+'">'+ bookTitle + "</a> 著者:"+bookAuthor+" 【出版元:"+bookPublisher+"】<br>";
}else{
return '<span class="error">入力されたISBNコードの本は見つかりませんでした。</span><br>';
}
}
// --></script>
</head>
<body>
<h1>ISBN (ASIN) 検索</h1>
<form method="get" name="ajaxForm" onsubmit="amazonSearch();return false;">
ISBN (ASIN) コード:<input type="text" value="4797332646" id="ISBN"><br>
<input type="button" value="アマゾンでISBN検索" onClick="amazonSearch()">
</form>
<div id="result"></div>
</body>
</html>

[第12章 3:蔵書共有 Ajaxへ]
[目次へ]

(2006.2.2)