Amazon アソシエイトで、テンプレート (XSLT) を使って商品情報や画像を表示する方法

先のエントリーで、「Amazon アソシエイトで、商品画像だけ表示する方法」 とか 「Amazon アソシエイトで、ウェブサービス (AWS) を REST で利用する方法」 とか検討してきたが、結局これらをまとめるとどうなるのだろう?オールマイティな方法、もっと楽な方法はないのだろうか?いろいろ試しているうちに、要はアマゾンの商品情報や画像を表示したい HTML の中で iframe を使えばよいことがわかったのでその方法を紹介する。 ブログと連動したこんなサイトも(ある程度は)簡単に作れる(ちなみに、私が今までアマゾンで買ったアイテムです)。 まず、HTML に以下のようにインラインフレーム (iframe) を埋め込む。ASIN コードは、当然のことながら表示したい ASIN コードとなる。その他、自分の持っている ID とか青字の部分を変えて欲しい。 ちなみに、オレンジの部分は、AWS のユーザーガイドによると webservices.amazon.co.jp ということになってはいるけれども、このホスト名を指定しても結局は xml-jp.amznxslt.com にリダイレクトされるし、効果は同じようだ(注:その後、同ユーザーガイドを読んでいたら、XSLT スタイルシート用の URL は xml-xx.amznxslt.com だそうだ)。また、xml-jp のところを xml-us に変えたりすると米国アマゾンに接続される(この場合、アソシエイト ID も米国アマゾンのものを使うこと。登録したメールアドレスが同じ場合は Access Key ID は日米で同じであるが、まぁこんなことはほとんどの人には関係ないだろう)。
<iframe
↓ここからは説明のために各パラメータごとに改行してます。
src="https://<font color="orange">xml-jp.amznxslt.com</font>/onca/xml?Service=AWSECommerceService
&ItemId=<font color="blue">B000IDHI9A</font> ← 表示したい商品の ASIN コード
&AWSAccessKeyId=<font color="blue">152ZP71KPB47XM09CS02</font> ← あなたの Access Key ID
&AssociateTag=<font color="blue">twinklexxx-22</font> ←あなたのアソシエイトID
&Operation=ItemLookup
&IdType=ASIN
&ContentType=text%2Fhtml
&Version=2006-03-08
&Page=1
&ResponseGroup=ItemAttributes,Images,Offers
↑(1) 商品詳細情報、(2) 画像 URL、(3) 価格をまとめて受け取る
&Style=<font color="blue">https://perltips.twinkle.cc/amazon.xsl</font>" ←テンプレートの URL
↑よって、ここまでは、改行なしの 1行で記述すること。
scrolling="no" marginwidth="0" marginheight="0" frameborder="0" height="175">
</iframe>
さらに以下のようなテンプレートを用意する必要がある。CD、本、PC などの一般の商品によって、返される情報が微妙に違うので、それぞれ XSLT の中の条件文で判断する必要がある(アーティスト名(Artist)、著者(Author)、メーカー(Manufacturer)など)。以下は例である(表示が切れていて申し訳ないが、ドラッグして選択すれば、ちゃんとコピペできるはずである)。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="https://www.w3.org/1999/XSL/Transform" xmlns:aws="https://webservices.amazon.com/AWSECommerceService/2006-03-08" exclude-result-prefixes="aws" version="1.0">
<xsl:output method="html"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />

<xsl:template match="/">
    <html lang="ja">
        <head>
            <link rel="stylesheet" href="<$MTBlogURL$>styles-xsl.css" type="text/css" media="screen,tv" />
            <link rel="shortcut icon" href="<$MTBlogURL$>favicon.ico" />
        </head>
        <body>
            <xsl:apply-templates select="aws:ItemLookupResponse/aws:Items/aws:Item" />
        </body>
    </html>
</xsl:template>

    <xsl:template match="aws:Item">

        <xsl:variable name="detail"       select="aws:DetailPageURL"                />
        <xsl:variable name="image"        select="aws:MediumImage/aws:URL"          />
        <xsl:variable name="width"        select="aws:MediumImage/aws:Width"        />
        <xsl:variable name="height"       select="aws:MediumImage/aws:Height"       />
        <xsl:variable name="title"        select="aws:ItemAttributes/aws:Title"     />
        <xsl:variable name="ourprice"     select="aws:Offers/aws:Offer/aws:OfferListing/aws:Price/aws:FormattedPrice" />
        <xsl:variable name="availavility" select="aws:Offers/aws:Offer/aws:OfferListing/aws:Availability" />

        <table>
            <tr>
                <td>
                    <a>
                        <xsl:attribute name="href"  ><xsl:value-of select="$detail" /></xsl:attribute>
                        <xsl:attribute name="target">_blank</xsl:attribute>
                        <img>
                            <xsl:attribute name="src"   ><xsl:value-of select="$image"  /></xsl:attribute>
                            <xsl:attribute name="height"><xsl:value-of select="$height" /></xsl:attribute>
                            <xsl:attribute name="width" ><xsl:value-of select="$width"  /></xsl:attribute>
                            <xsl:attribute name="alt"   ><xsl:value-of select="$title"  /></xsl:attribute>
                            <xsl:attribute name="title" ><xsl:value-of select="$title"  /></xsl:attribute>
                        </img>
                    </a>
                </td>
                <td>
                    <a>
                        <xsl:attribute name="href"  ><xsl:value-of select="$detail" /></xsl:attribute>
                        <xsl:attribute name="target">_blank</xsl:attribute>
                        <xsl:value-of select="$title" />
                    </a><br /><br />

                   <xsl:choose>
                       <xsl:when test="aws:ItemAttributes/aws:Author">
                           <xsl:value-of select="aws:ItemAttributes/aws:Author" />
                       </xsl:when>
                       <xsl:when test="aws:ItemAttributes/aws:Artist">
                           <xsl:value-of select="aws:ItemAttributes/aws:Artist" />
                       </xsl:when>
                       <xsl:when test="aws:ItemAttributes/aws:Director">
                           <xsl:value-of select="aws:ItemAttributes/aws:Director" />
                       </xsl:when>
                       <xsl:when test="aws:ItemAttributes/aws:Composer">
                            <xsl:value-of select="aws:ItemAttributes/aws:Composer" />
                        </xsl:when>
                        <xsl:when test="aws:ItemAttributes/aws:Manufacturer">
                            <xsl:value-of select="aws:ItemAttributes/aws:Manufacturer" />
                        </xsl:when>
                    </xsl:choose>
                    <xsl:choose>

                    <xsl:when test="aws:ItemAttributes/aws:Author">
                        <xsl:if test="aws:ItemAttributes/aws:Publisher">
                            <br /><xsl:value-of select="aws:ItemAttributes/aws:Publisher" />
                        <xsl:if test="aws:ItemAttributes/aws:PublicationDate">
                        </xsl:if>
                            (<xsl:value-of select="aws:ItemAttributes/aws:PublicationDate" />)
                        </xsl:if>
                    </xsl:when>
                    <xsl:when test="aws:ItemAttributes/aws:ReleaseDate">
                        <br /><xsl:value-of select="aws:ItemAttributes/aws:ReleaseDate" />
                    </xsl:when>
                    </xsl:choose>

                    <div id="price">
                        <xsl:value-of select="$ourprice"/><br />
                    </div>
                    <xsl:value-of select="$availavility" /><br />
                    <div id="more">
                        <a>
                            <xsl:attribute name="href"  ><xsl:value-of select="$detail" /></xsl:attribute>
                            <xsl:attribute name="target">_blank</xsl:attribute>
                            <br />Amazon で詳しく見る
                        </a>
                    </div>
                </td>
            </tr>
        </table>
    </xsl:template>

</xsl:stylesheet>
非常に大事なのは
<xsl:output method="html"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
という行で、この宣言で生成される HTML の最初の行に
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
という 1行が出力される(実際には 1行)。これがないと IE ではスタイルシートを別ファイルに指定したときにうまく表示されない (Firefox はこれがなくてもきちんと表示されていたので、私はこのことですごく悩んだ)。 上の XSLT への実際のファイルへのリンクと、画像だけのテンプレートのリンクは、以下に挙げた。 イメージ的には、以下のようになる。
つまるところ、amazon.xsl が、iframe に表示される内容(HTML)となる。なので、この XSLT を自分用にカスタマイズすれば、お望みの表示ができると思う。 それでは、Enjoy!
トラックバック URL: https://perltips.twinkle.cc/trackback/102
Posted on 2006-06-01 by yas |
すごく、ためになりました
Posted by あくと (未認証ユーザ) on 2006/06/07(水) 22:32
お役に立てて光栄です。これからもよろしくお願いします。 --- yas
Posted by yas (未認証ユーザ) on 2006/06/07(水) 22:54
Amazon アソシエイトで、商品画像だけ表示する方法
Trackback from Perl Tips: ネットサーフィン(死語?)をしていたある日、アマゾンアソシエイトにリンクしてい......
Posted by Perl Tips (未認証ユーザ) on 2006/05/31(水) 02:47
Amazon アソシエイトで、ウェブサービス (AWS) を REST で利用する方法
Trackback from Perl Tips: REST とは、REpresentational State Transfer......
Posted by Perl Tips (未認証ユーザ) on 2006/05/31(水) 02:47
Amazon アソシエイトで、テンプレート (XSLT) を使って商品情報や画像を表示するカラクリ
Trackback from Perl Tips: 「Amazon アソシエイトで、テンプレート (XSLT) を使って商品情報や......
Posted by Perl Tips (未認証ユーザ) on 2006/06/06(火) 10:56
Amazon アソシエイトで、画像の表示を自由に変更する方法
Trackback from Perl Tips: Amazon アソシエイトでは AWS (Amazon Web Service......
Posted by Perl Tips (未認証ユーザ) on 2006/07/09(日) 05:40
Amazon アソシエイトで、テンプレート (XSLT) を使って画像の大きさを変更する方法
Trackback from Perl Tips: 「Amazon アソシエイトで、画像の表示を自由に変更する方法」では、アマゾン......
Posted by Perl Tips (未認証ユーザ) on 2006/07/09(日) 08:14
Amazon アソシエイトで、Movable Type を使ったアフィリエイトを簡単にする方法
Trackback from Perl Tips: このブログのトップページや個別エントリーのページにあるように、Amazon ア......
Posted by Perl Tips (未認証ユーザ) on 2006/07/09(日) 11:07