アマゾンWebサービスで得られたXMLデータを解析して書籍タイトルを表示させてみます。
まず、XMLデータを見てみましょう。以下が実際のXMLの一部を抜き出したものです。
<Item>
<ASIN>4798110450</ASIN>
<DetailPageURL>
</DetailPageURL>
<ItemAttributes>
<Author>吉田 茂樹</Author>
<Binding>大型本</Binding>
<Creator Role="著">吉田 茂樹</Creator>
<ListPrice>
<Amount>2310</Amount>
<CurrencyCode>JPY</CurrencyCode>
<FormattedPrice>¥ 2,310</FormattedPrice>
</ListPrice>
<NumberOfPages>328</NumberOfPages>
<ProductGroup>Book</ProductGroup>
<PublicationDate>2006-03-02</PublicationDate>
<Publisher>翔泳社</Publisher>
<Title>TCP/IP入門 第2版</Title>
</ItemAttributes>
書籍の情報はItemタグ内に含まれています。その中に書籍情報がたくさんありますが、Titleタグ部分が書籍のタイトルになります。Itemタグは書籍の数(今回の場合は最大10)だけ存在します。つまりItemタグの個数だけfor()を使って繰り返し処理を行い、Itemタグ内にあるTitleタグの最初のテキストノードの文字を取得し表示すれば、書籍一覧を表示することができます。(サンプルを
実行する)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>アマゾン検索 (書籍タイトル一覧)</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function amazonSearch()
{
n = $("bCode").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","amazon.rb?query="+n+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = bookList(httpObj.responseXML);
}
}
function bookList(xml)
{
txt = "";
itemList = xml.getElementsByTagName("Item");
for (i=0; i<itemList.length; i++)
{
bookTitle = itemList[i].getElementsByTagName("Title")[0].childNodes[0].nodeValue;
txt += bookTitle + "<br>";
}
return txt;
}
// --></script>
</head>
<body>
<h1>アマゾン検索 (書籍タイトル一覧)</h1>
<form method="get" name="ajaxForm" onsubmit="amazonSearch();return false;">
ジャンルコード:<input type="text" value="466298" id="bCode">
<input type="button" value="タイトル一覧表示" onClick="amazonSearch()">
</form>
<div id="result"></div>
</body>
</html>
XMLタグ内には多くの書籍情報がありますが、次に金額を表示させてみます。金額はクエリーにResponseGroup=Mediumを指定した場合、FormattedPriceタグの最初のノードに円記号付き、カンマ付きの数値が入っています(整形されていない金額はResponseGroup=Largeなどで取得できます。この場合はタグが異なります。)。(サンプルを
実行する)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>アマゾン検索 (書籍と金額を一覧で表示)</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function amazonSearch()
{
n = $("bCode").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","amazon.rb?query="+n+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = bookList(httpObj.responseXML);
}
}
function bookList(xml)
{
txt = "";
itemList = xml.getElementsByTagName("Item");
for (i=0; i<itemList.length; i++)
{
bookTitle = itemList[i].getElementsByTagName("Title")[0].childNodes[0].nodeValue;
bookPrice = itemList[i].getElementsByTagName("FormattedPrice")[0].childNodes[0].nodeValue;
txt += bookTitle + " "+bookPrice+"<br>";
}
return txt;
}
// --></script>
</head>
<body>
<h1>アマゾン検索 (書籍と金額を一覧で表示)</h1>
<form method="get" name="ajaxForm" onsubmit="amazonSearch();return false;">
ジャンルコード:<input type="text" value="466298" id="bCode">
<input type="button" value="タイトル一覧表示" onClick="amazonSearch()">
</form>
<div id="result"></div>
</body>
</html>
書籍のタイトルも金額も表示できました。次は書籍名をクリックしたらアマゾンのページに移動するようにリンクを指定してみます。該当する書籍の詳細ページへのリンクを示すタグはDetailPageURLです。このタグの最初のテキストノードの文字がhttp://で始まるURLになっています。このURLをaタグのhrefの値として指定すればリンクを設定することができます。(サンプルを
実行する)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>アマゾン検索 (リンク付き一覧表示)</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function amazonSearch()
{
n = $("bCode").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","amazon.rb?query="+n+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = bookList(httpObj.responseXML);
}
}
function bookList(xml)
{
txt = "";
itemList = xml.getElementsByTagName("Item");
for (i=0; i<itemList.length; i++)
{
bookTitle = itemList[i].getElementsByTagName("Title")[0].childNodes[0].nodeValue;
bookPrice = itemList[i].getElementsByTagName("FormattedPrice")[0].childNodes[0].nodeValue;
bookLink = itemList[i].getElementsByTagName("DetailPageURL")[0].childNodes[0].nodeValue;
txt += '<a href="'+bookLink+'">'+ bookTitle + "</a> "+bookPrice+"<br>";
}
return txt;
}
// --></script>
</head>
<body>
<h1>アマゾン検索 (リンク付き一覧表示)</h1>
<form method="get" name="ajaxForm" onsubmit="amazonSearch();return false;">
ジャンルコード:<input type="text" value="466298" id="bCode">
<input type="button" value="タイトル一覧表示" onClick="amazonSearch()">
</form>
<div id="result"></div>
</body>
</html>
ここまでは売れている順番で書籍を表示しましたが、価格順や新刊順にすることもできます。次項では、書籍の表示条件を指定して表示させてみます。
[
第八章 3:表示条件を設定するへ]
[
目次へ]
(2006.1.24)