404 motivation not found | t_ishidaのブログ

TAG | Amazon

今回、AWSとXSLTを使用してAmazonの商品を自サイト内に表示すると言うのをやったのですが、そこそこにハマったのでメモ書きしときます。今回はCGI・PHP等のプログラムは使用しないような類の話です。

AWS

利用まで


AWSについて色々書いてあるページ

AWSとはAmazonが提供するSOAP,RESTベースのWebサービスで、HTTPを通じてAmazonで出来る事の多くを操作することが出来るサービスです。例えば、AWSを使用すれば、自分のサイト内でAmazonの商品を検索して、Amazonの商品を販売する事が出来るようになります。

上記リンクにも書いてありますが、AWSを使用する為には大雑把に以下のステップを踏む必要が有ります。この辺りは、今回の仕事で使用するに辺り、僕が踏む事の無かったステップなので、あまり詳しくは分かりません。今度、WordPressのプラグインの開発の仕方を調べる時に、AWSを利用してみようと思いますので、その時に詳しく触れてみます。

ざっくばらんな話

RESTとかSOAPとか言われても分からないよ。っていう人のために言うと「特定のURLに対してパラメータ付きでPOSTしたりGETしたりすれば、その機能を使用出来るよ」と言う事です。今回の案件ではPOSTする事が無かったし、バキバキにAPIを駆使したりする事が無かったので今回は書きません。

URLについて

多分、利用申請して、貰ったアカウントによって、対象となるサーバーが違うんじゃないかとは思いますが、とりあえず、僕が利用する事になったURLと、その仕様について説明します。

http://webservices.amazon.co.jp/onca/xml?
Service=AWSECommerceService&              //Serviceの種類を指定します
SubscriptionId=[AccessKeyのようなもの]&
AssociateTag=[アソシエイトのID]&
Operation=ItemSearch&                    //メソッド ※
ResponseGroup=Small,SalesRank,Images&    //返って来るデータの指定
ContentType=text/html&                   //欲しいデータの形式をカンマ区切りで指定 ※
Page=1&                                  //ページングするので欲しいページ
Version=2008-04-07&                      //Webサービスのバージョン(割と重要)
SearchIndex=Books&                       //本とかCDとか商品カテゴリ
Keywords=&                               //検索キーワード
BrowseNode=466282&                       //実はよく分からない
Style=http://yourhost/template.xsl       //パースしたいXSLTのURL

※のところの詳細は、http://ecs.amonya.com/ecs40/operations.html を参照

今回のテーマとしてはXSLTを使用して結果を返して欲しいって言う事なのでContentTypeを”text/html”にして、Styleを指定しています。もし、普通にサーバーサイドプログラミングをするのであれば、ContentTypeを”text/XML”にすれば良いでしょう。

XSLT

大雑把に言えば、XMLを直接見やすいように整形するテンプレートエンジンだと思ってください。こんなのです。サンプルを読むための前提知識として大事なのは以下です。また、サンプル中にも分かりにくそうな箇所にコメント入れているので参考にして下さい。

  • 値の埋め込み:<xsl:value-of select=”[XPath]” /> XPathにマッチする値を埋め込みます。
  • テンプレートの定義:<xsl:template match=”[XPath]“></xs:template> XPathにマッチするテンプレートを定義します。
  • テンプレートの適用: <xsl:apply-templates select=”[XPath]“/> XPathにマッチするテンプレートの定義を該当箇所に定義します。該当項目が複数あれば個数分だけ適用します。

また、XPathって言うのはXMLのツリー構造を、ディレクトリのパスのように”/”区切りで表現するようにしたものです。

例えば、

<?xml version=”1.0″ encoding=”UTF-8″?>

<item>

<permalink>http://hogehoge.jp</permalink>

<description>hogehogefugafuga</description>

</item>

とか有った時、”/item/permalink”とすれば「http://hogehoge.jp」が取得できます。

<?xml version=”1.0″ encoding=”UTF-8″?>
<xsl:stylesheet version=”1.0″
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
xmlns:aws=”http://webservices.amazon.com/AWSECommerceService/2008-04-07″>
<xsl:output method=”html” encoding=”utf-8″/>

<xsl:template match=”/”>
<html lang=”ja”>
<head>
<title>XSLのテスト</title>
</head>
<body>
<ul class=”books”>

<!–itemが沢山あれば個数分”aws:ItemSearchResponse/aws:Items/aws:Item”として定義しているテンプレートを適用する。 –>
<xsl:apply-templates select=”aws:ItemSearchResponse/aws:Items/aws:Item”/>
</ul>
</body>
</html>
</xsl:template>
<!– すぐ上のコメントに該当するテンプレートね –>
<xsl:template match=”aws:ItemSearchResponse/aws:Items/aws:Item”>
<li>
<ul>
<li>
<xsl:apply-templates select=”aws:MediumImage”/>
</li>
<li>

<!– aタグを作ってますって言えば分かりますね。 –>
<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=”substring( aws:ItemAttributes/aws:Title , 1, 5 )” />
</xsl:element>
</li>
<li>
(<xsl:value-of select=”aws:ItemAttributes/aws:Author” />)
</li>
</ul>
</li>
</xsl:template>

<xsl:template match=”aws:MediumImage”>
<xsl:element name=”img”>
<xsl:attribute name=”src”>
<xsl:value-of select=”aws:URL” />
</xsl:attribute>
<xsl:attribute name=”width”>
<xsl:value-of select=”aws:Width” />
</xsl:attribute>
<xsl:attribute name=”height”>
<xsl:value-of select=”aws:Height” />
</xsl:attribute>
<xsl:attribute name=”alt”>
<xsl:value-of select=”../aws:ItemAttributes/aws:Title” />
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

, , ,

Find it!

Theme Design by devolux.org

Tag Cloud