2008-10-02 21:29:05
Amazon.co.jpの書籍情報を取得して結果を表示する。というのはこれまで嫌と云うほどやってきたことなのだが、専らPHPだった(希にRuby、一応Pythonでもやり方だけは確認した)。サーバーサイド処理至上主義者だった私は(嘘)、JavaScriptで処理するなんて許せなかったのだ(本当は知らなかっただけだ)。PHPもRubyもPythonも動かせないところでも、私にもいろいろなものを組み込んだサイトを作れるということなんだろうか。ようやく何が便利なのか解ってきた。しかし、JavaScriptのことはまだほとんど解っていない。
Amazonからの情報はxsltで変換するらしい。.xslってファイルを作って保存するとか。前に作ったことがある。数年前にはこれをちょっとは作れるようになったのだ。ちょっとだけど。もうすっかり忘れてしまっているのが情けない。ということでAmazon Web サービス入門を参考にして、見よう見まねで作ってみた。今回はASINで商品情報を得るItemLookupというものである。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2008-08-19"
version="1.0">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/">
<xsl:apply-templates select="aws:ItemLookupResponse/aws:Items/aws:Item"/>
</xsl:template>
<xsl:template match="aws:ItemLookupResponse/aws:Items/aws:Item">
document.write('<p>『<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="aws:DetailPageURL" />
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="aws:ItemAttributes/aws:Title" />
</xsl:element>』<br />');
document.write('<xsl:value-of select="aws:ItemAttributes/aws:Author" /><br />');
document.write('<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="aws:DetailPageURL" />
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="aws:ImageSets/aws:ImageSet/aws:MediumImage/aws:URL" />
</xsl:attribute>
<xsl:attribute name="width">
<xsl:value-of select="aws:ImageSets/aws:ImageSet/aws:MediumImage/aws:Width" />
</xsl:attribute>
<xsl:attribute name="height">
<xsl:value-of select="aws:ImageSets/aws:ImageSet/aws:MediumImage/aws:Height" />
</xsl:attribute>
<xsl:attribute name="alt">
<xsl:value-of select="aws:ItemAttributes/aws:Title" />
</xsl:attribute>
<xsl:attribute name="border">0</xsl:attribute>
</xsl:element>
</xsl:element></p>');
</xsl:template>
</xsl:stylesheet>
よく解らないなあ。参考にしたサイトには、JavaScriptの呪文は入っていない。これの入れ方がまだよく解らないのだ。これだけでもずいぶん苦労したのである。こいつをamztest.xslという名前で、外からアクセスできるところに保存する。数年前にも戸惑ったことを忘れて、またlocalhostに保存して、どうして動かないんだろうと思ってしまったことは、恥ずかしくて云えない。とりあえず、.mac(今はMobileMeとかいう変な名前だ)に保存しよう。htmlの中へは下のようにして、組み込んだ。
<script type="text/javascript" src="http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=0HA30CHFKA8AR774MT82&AssociateTag=tolleetlege0d-22&Operation=ItemLookup&IdType=ASIN&ItemId=433603835X&ResponseGroup=Medium&Version=2008-08-19&ContentType=text/html&Style=http://homepage.mac.com/yoshion/amztest.xsl"> </script>
そうするとこんなふうに表示される。
Amazonのitemlookupでは、ItemIdをコンマで区切って最大10件まで一度に調べられる。上のもやってみたのだが、2個以上にすると結果が表示されないのだ。JavaScriptの部分を外して、生で表示させるとうまくいくのだが、JavaScriptで組み込もうとすると失敗する。どうしたらいいんだろう。根本を理解せずに見よう見まねだけでやっていると、こういうときに対処のしようがない。情けない。