ASP.NET 徹底活用術(Part2)のホームへ戻る

■書籍の検索結果をRSSで提供する

 

アマゾンの書籍をジャンル別に検索して検索結果をRSSで提供するWebページを紹介します。DataViewに格納されている検索結果をRSSで提供するには、Repeaterコントロールを使用する方法とXmlDocumentクラスを使用する方法がありますが、ここでは前者を紹介します。後者のサンプルは、ダウンロードファイルに収録されていますのでそちらを参照してください。

 

WebページにRepeaterを配置したら、HeaderItemplateRSS<rss><channel>の開始タグと<title><link><description>の開始/終了タグを埋め込みます。<title>…</title>タグのデータ連結式で記述したGetNodeメソッドは、検索対象となったノード番号を取得します。ノード番号は、URLのクエリ文字列として指定します。

 

<HeaderTemplate>

  <rss version="2.0">

    <channel>

      <title>Amazon Books by Node (<%# GetNode() %>)</title>

      <link>

        http://www.friendlysw.com/rss/amazon/AmazonRssFeed.aspx

      </link>

      <description>

        ここのRSSでは、アマゾンの書籍をジャンル別に検索した結果を提供しています。

      </description>

</HeaderTemplate>

 

FooterTemplateには、RSS<channel><rss>の終了タグを埋め込みます。

 

<FooterTemplate>

    </channel>

  </rss>

</FooterTemplate>

 

ItemTempalteには、RSS<item>タグを埋め込みます。<item>タグでは書籍の情報を記述します。<title><descriotion>には、書籍のタイトル、定価、著者名、発刊日、出版社、評価、ランクなどをバインドします。<link><author>には、アマゾンへのリンクと著者名をバインドします。<pubDate>には、システム日付をバインドします。

 

<ItemTemplate>

  <item>

    <title> <%# FormatForXML(DataBinder.Eval(Container.DataItem, "Title")) %> </title>

    <description>

      <%# DataBinder.Eval(Container.DataItem, "ListPrice") %>;

      <%# Container.DataItem("Author") %>;

      <%# Container.DataItem("PublicationDate") %>;

      <%# Container.DataItem("Publisher") %>;

      <%# String.Format("評価( {0} )", Container.DataItem("AverageRating")) %>;

      <%# String.Format("ランク( {0} )", Container.DataItem("SalesRank")) %>

    </description>

    <link>

      <%# DataBinder.Eval(Container.DataItem, "AmazonURL") %>

    </link>

    <author>

      <%# Container.DataItem("Author") %>

    </author>

    <pubDate>

      <%# String.Format("{0:r}", System.DateTime.Now) %>

    </pubDate>

  </item>

</ItemTemplate>

 

Page_Loadイベントハンドラでは、クエリ文字列からノード番号を取得してBindRepeaterメソッドの引数として渡します。クエリ文字列を省略したときは、「ベストセラー」のノード番号を既定値として使用します。BindRepeaterメソッドは、AmazonJPクラスのSearchBooksByNodeメソッドを実行してDataViewを取得したらRepeaterにバインドします。

 

Sub Page_Load(sender As Object, e As EventArgs)

  mstrNode = Request.Params("Node")

  If mstrNode Is Nothing Then

     mstrNode = "465610"

  End If

  BindRepeater(mstrNode)

End Sub

 

Sub BindRepeater(strNode As String)

  Repeater1.DataSource = AmazonServices.AmazonJP.SearchBooksByNode(strNode)

  Repeater1.DataBind()

End Sub

 

RepeaterDataViewをバインドしてRSS(XML)形式で表示するために、@Pageディレクティブに「ContentType="text/xml"」を追加します。

 

<%@ Page Language="VB" ContentType="text/xml"  %>

 

ブラウザを起動してWebページを表示すると、検索結果がRSS形式で表示されます(11)

 

11 ノード番号(465610)で検索した結果がRSS形式で表示された

 

RepeaterHeaderTemplateXSLスタイルシートを追加してRSS(XML)HTML形式に変換して表示することも可能です。本稿のダウンロードファイルにScott Mitchell氏が作成したXSLスタイルシート(rss2html.xsl)が収録されていますのでご利用ください。RSSXSLスタイルシートを適用させるには、<rss>タグの直前に次のようなタグを追加します。

 

<HeaderTemplate>

 <?xml-stylesheet type="text/xsl" href="xsl/rss2html.xsl" version="1.0" ?>

 <rss version="2.0">

 ・・・

</HeaderTemplate>

 

RSSXSLスタイルシートを適用してHTML形式に変換すると、ブラウザフレンドリーなRSSを生成することができます(12)RSSRSSリーダーで購読(13)したときは、XSLスタイルシートが無効になります。

 

12 RSS(XML)XSLスタイルシートでHTML形式に変換して表示

 

 

13 RSSリーダー(ShapReader)で購読した例

 

 

ASP.NET 徹底活用術(Part2)のホームへ戻る