.NET TIPS

[ASP.NET]RSSフィードをWebフォームで読み込み表示するには?

山田 祥寛
2006/01/06

 いまやRSS(RDF Site Summary)は、サイト・コンテンツのサマリ情報(主に新着記事情報やニュースなど)を配信するための標準的かつ有効な手段だ。スパムメールのはんらんなどによって、メール媒体による情報配信の効果が薄れつつある昨今、スパムとは無縁なRSSの重要性はますます高まっているともいえるだろう。

 「TIPS:[ASP.NET]データベースからRSSフィード情報を生成するには?」では、自サイト上でRSSフィードを動的に生成する手段を紹介したが、もちろん、RSSとは自ら発行するためだけに使うものではない。インターネット上のニュース・サイトやBlogサイトなどで公開されているRSSフィードを引用することで、自サイトでポータル的に複数サイトの新着情報を集約することも可能だ。

 そこで本稿では、RSSフィード引用の例として、筆者が運営する「サーバサイド技術の学び舎 - WINGS」で公開しているRSSフィード(http://www.wings.msn.to/contents/rss.php)を題材にし、RSSフィードからWebフォーム上に新着記事一覧を作成してみることにしよう。

1. XSLTスタイルシートを用意する

 本サンプル・プログラムを利用する場合、あらかじめ仮想ディレクトリ上に以下のようなXSLTスタイルシートを用意しておく必要がある。このXSLTスタイルシートは、外部サイトから取得したRSSフィードをHTML形式に変換するためのものだ。

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rss="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/" version="1.0">
  <xsl:template match="/rdf:RDF">
    <ul type="square">
    <xsl:for-each select="rss:item">
      <xsl:sort select="dc:date" data-type="text" order="descending" />
      <xsl:sort select="title" data-type="text" order="ascending" />
      <xsl:if test="position()&lt;=10">
        <li>
          <xsl:element name="a">
            <xsl:attribute name="href">
              <xsl:value-of select="rss:link" />
            </xsl:attribute>
            <xsl:value-of select="rss:title" />
          </xsl:element>
        </li>
      </xsl:if>
    </xsl:for-each>
    </ul>
  </xsl:template>
</xsl:stylesheet>
RSSフィードをHTML文書に変換するためのXSLTスタイルシート(rss10.xsl)
このXSLTスタイルシートではRSSフィード上の新着情報10件を表示する。表示件数を変更したい場合は太字部分を適切な値に変更すればよい。

 本稿ではXSLTに関する詳細は割愛するが、興味のある方は「サンプルで覚えるXSLTプログラミング」などの情報を参考にするとよい。このXSLTスタイルシートでは、RSSフィード上の新着情報を最新10件まで表示しているが、表示件数を変更したい場合は、上記リストの太字部分を適宜変更していただきたい。

2. XmlコントロールでXSLT変換を行う

 後は、WebフォームであるrssReader_cs.aspx(rssReader_vb.aspx)でRSSフィードを取得し、上記1で作成したXSLTスタイルシートに関連付けるだけだ。

 ASP.NETには、XSLT変換を行うためのサーバ・コントロールとしてXmlコントロールが用意されているので、本稿でもこれを利用してみよう。

<%@ Page Language="C#" ContentType="text/html" %>
<%@ Import Namespace="System.Net" %>

<script runat="Server">
public void Page_Load(Object sender, EventArgs e){
  WebClient myClient = new WebClient();
  // 取得したRSSフィード(文字列)をXmlコントロールにセット
  rss.DocumentContent = Encoding.GetEncoding("Shift_JIS").GetString(
    myClient.DownloadData("http://www.wings.msn.to/contents/rss.php"));
  // 適用するXSLTスタイルシートのパスをXmlコントロールにセット
  rss.TransformSource = "rss10.xsl";
}
</script>
<html>
<head>
<title>RSSフィードの取得</title>
</head>
<body>
<asp:Xml id="rss" runat="Server" />
</body>
</html>
RSSフィードをXSLT変換するためのWebフォーム(C#版:rssReader_cs.aspx)
 
<%@ Page Language="VB" ContentType="text/html" %>
<%@ Import Namespace="System.Net" %>

<script runat="Server">
Public Sub Page_Load(sender As Object, e As EventArgs)
  Dim myClient As New WebClient()
  ' 取得したRSSフィード(文字列)をXmlコントロールにセット
  rss.DocumentContent = Encoding.GetEncoding("Shift_JIS").GetString( _
    myClient.DownloadData("http://www.wings.msn.to/contents/rss.php"))
  ' 適用するXSLTスタイルシートのパスをXmlコントロールにセット
  rss.TransformSource = "rss10.xsl"
End Sub
</script>
<html>
<head>
<title>RSSフィードの取得</title>
</head>
<body>
<asp:Xml id="rss" runat="Server" />
</body>
</html>
RSSフィードをXSLT変換するためのWebフォーム(VB.NET版:rssReader_vb.aspx)

 Xmlコントロールの使い方は極めてシンプルで、変換対象のXML文書と、変換ルールを示したXSLTスタイルシートをプロパティにセットするだけだ。後はXmlコントロールが「.xml」および「.xsl」ファイルの読み込みから解析、変換、出力処理までを自動で行ってくれる。ここで注目していただきたいのは、以下の2点だ。

(1)データ型によって使用するプロパティが異なる

 Xmlコントロールでは、XML文書/XSLTスタイルシートを、それぞれ文字列、ファイル(パス)、オブジェクトという3つの形式で受け取ることができる。以下に、それぞれの型に応じて使用するプロパティをまとめておこう。

プロパティ 概要
DocumentContent 変換対象のXML文書(文字列)
DocumentSource 変換対象のXML文書(ファイルへのパス)
Document 変換対象のXML文書(XmlDocumentオブジェクト)
TransformSource 変換ルールを記述したXSLTスタイルシート(ファイルへのパス)
Transform 変換ルールを記述したXSLTスタイルシート(XslTransformオブジェクト)
Xmlコントロールの主要なプロパティ

 本稿のサンプル・プログラムでは、RSSフィードを文字列として取得しているので、その文字列をDocumentContentプロパティへ、XSLTスタイルシートはファイルシステム上からファイルとして取得しているので、そのパス名をTransformSourceプロパティへ、それぞれセットしている。

(2)ネットワーク上のリソースを取得するのはWebClientクラスの役割

 DocumentSource、TransformSourceなどのプロパティには、URLを指定することはできない。従って、今回のようにイントラネットまたはインターネット経由のリソースを取得するには、WebClientクラス(System.Net名前空間)を利用する必要がある。

 本稿のサンプル・プログラムでは、WebClientクラスのDownloadDataメソッドを利用して、指定されたURLからRSSフィードを取得している。DownloadDataメソッドは取得したデータをバイト配列として返すので、Encodingクラス(System.Text名前空間)のGetStringメソッドで、指定された文字エンコーディングに従って、文字列に変換する必要がある。Encodingオブジェクトは、EncodingクラスのGetEncodingメソッドで取得することが可能だ。

 以上を理解したら、さっそくサンプル・アプリケーションを実行してみよう。以下のように、外部サイトから取得したRSSフィードがリスト表示されれば成功だ。

rssReader_cs.aspx(rssReader_vb.aspx)の実行結果

 なお、本稿で扱ったサンプルはRSS 1.0に対応するものだ。そのほかのRSSのバージョンに対応するには、適宜、rss10.xslの内容を書き換える必要がある。End of Article

カテゴリ:Webフォーム 処理対象:RSS
カテゴリ:Webフォーム 処理対象:Xmlコントロール
使用ライブラリ:Xmlコントロール
使用ライブラリ:WebClientクラス(System.Net名前空間)
使用ライブラリ:Encodingクラス(System.Text名前空間)
関連TIPS:[ASP.NET]データベースからRSSフィード情報を生成するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]データベースからRSSフィード情報を生成するには?
RSS 2.0/ATOM 1.0フィードを処理するには?
[ASP.NET]ユーザー・コントロールでパーソナライズ可能なWebパーツを作成するには?
[ASP.NET]PropertyGridEditorPartコントロールでカスタム・プロパティを編集するには?
[ASP.NET]DataGridコントロールでデータセットを表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間