連載:実践! WCFプログラミング

第1回 WCFを使用してRSS/Atomフィーダを作成する

デジタルアドバンテージ 岸本 真二郎
2008/06/27
Page1 Page2 Page3 Page4

 いまさらだが、ブログをはじめインターネット上の多くのWebサイトは、RSSを利用してサイトの更新情報を容易に取得できるようにしている。そしてRSSリーダーとしては、Windowsデスクトップ用やWebベースのものが多数提供されており、多くのメール・クライアントやWebブラウザもRSSに対応している。RSSによる情報配信/閲覧の仕組みは、もはやインターネットには欠かせない存在といえるだろう。

 このような背景から、.NET Frameworkの最新版である.NET Framework 3.5では、WCF(Windows Communication Foundation)が拡張され、RSSおよびAtomによるサイトの更新情報を提供することが可能になった。本稿ではこの機能を利用し、RSSの配信サービスを作成しながら、WCFのプログラミングを学んでいく。

■WCFとは?

 WCFとは、SOAP XML Service、WSDL、分散トランザクション、メッセージ・キューイングといったさまざまな分散テクノロジの実装を、統一されたプログラミング・モデルで行えるようにしたものだ(WCFの概要については「Windows Communication Foundation概説」を参照)。

 WCFは.NET Framework 3.0で導入されたフレームワークであるが、いま述べたように.NET Framework 3.5ではいくつかの拡張が行われており、実装可能な分散テクノロジの1つとして、RSSとAtomに対応している。

■RSS/Atomとは?

 RSSおよびAtomは、Webサイトに含まれるコンテンツの更新情報をXML形式で配信するための仕組みで、それぞれに仕様が定められている。配信されるデータ(XMLデータ)は「フィード(feed)」と呼ばれ、その配信を行うプログラムやサービスは「フィーダ(feeder)」と呼ばれる。また、RSS/Atomによる配信処理は「シンジケーション(Syndication)」と呼ばれる。

 RSS/Atomの生い立ちについては紆余(うよ)曲折があるようで、なかなか簡潔に説明しづらい部分があるのだが、RSSのバージョンは0.91、1.0、2.0などが、一方のAtomは現在1.0が存在する。RSSで注意が必要なのは、バージョンごとに大きく仕様が異なり、それぞれのバージョンに個別に対応しなければならない点である。一般的にはRSS 1.0とRSS 2.0、そしてAtom 1.0の3種類が比較的多く使われているようだ。

 ただし、WCFがサポートするフィードの種類は、RSS 2.0 Atom 1.0の2種類のみである。

 RSS 1.0のプログラミングについては、「.NET TIPS:[ASP.NET]データベースからRSSフィード情報を生成するには?」で紹介しているので参考にしていただきたい。またRSSについては、「特集:サイトの更新情報を提供する標準言語RSS」も参照されたい。

RSS/Atomフィードの構成

 ここではまず、RSS 2.0とAtom 1.0の内容について簡単に説明しておく。

■RSS 2.0

 RSS 2.0のフィードは、「チャネル情報(channel)」と複数個の「アイテム(item)」で構成されている。

 チャネルはフィード全体の情報を示すもので、フィードのタイトルやサイトのURL、フィード(サイト)の概要などが記述される。それに対してアイテムは、更新された1ページ分の情報を含む。これには、ページのタイトル、概要、URLなどが含まれる。例えばサイト上に10個(≒10ページ)の更新情報があるとすると、フィードには10個のアイテムが含まれることになる。

 後ほど実際にプロジェクトを作成してRSSフィード処理を実装するが、RSS/AtomはどちらもXMLドキュメントである。RSS 2.0では、<rss>というトップレベルの要素の中に、いま説明したチャネルを表す<channel>、アイテムを表す<item>といったタグを使ってXMLドキュメントを構成する。その概略は次のようになる。

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <!-- サイトの概要 -->
    <item>
      <!-- 更新されたページの情報 その1 -->
    </item>
    <item>
      <!-- 更新されたページの情報 その2 -->
    </item>
  </channel>
</rss>
リスト1 RSS 2.0のフィードの構成

 サイトの概要を示す<channel>要素には、title(フィードの名称)、link(WebサイトのURL)、description(サイトの説明)といった要素を含める。このほかの要素としては、language(言語情報:ja-jp、en-USなど)、copyright、pubDate(発行日)、image(フィードを表示する際に利用される画像)などの要素も含められる。さらに次に説明する個々のページの更新情報を記述した<item>要素が含まれる。

 <item>要素は更新されたページの情報を設定する。この要素には、title(タイトル)、description(ページの概要)、author(作成者)、category(カテゴリ情報)、pubDate(発行日)などの要素を含める。

■Atom 1.0

 一方Atom 1.0は、XMLの構造的にはRSS 2.0とさほど変わりはなく、トップレベルの要素が<feed>になる。ここにRSS 2.0のチャネルに相当する内容がセットされ、アイテムに相当する要素は<entry>要素で表現される。<entry>要素は<feed>要素内に配置される(これもRSS 2.0とほぼ同じ構成)。

■WCFが出力するフィード

 以上のような要素を含むXMLドキュメントを作成すれば、RSSフィードが出来上がる。これは手作業でも可能なわけだが、WCFを用いることで、RSS/Atomの仕様にのっとったXMLドキュメントの作成と配信処理をWCFに任せてしまうことができるわけだ。

 実際にWCFで作成したフィード(RSS 2.0)の内容は次のようになる。

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>title:これはフィードのタイトルです</title>
    <link>http://www.hoge.jp/</link>
    <description>description:2番目のパラメータA WCF Syndication Feed</description>
    <language>ja-jp</language>
    <copyright>copyright(c) Digital Advantage</copyright>
    <lastBuildDate>Thu, 05 Jun 2008 16:38:27 +0900</lastBuildDate>
    <generator>.NET Framework WCF</generator>
    <item>
      <link>http://www.hoge.jp/index.html</link>
      <title>title:最初のアイテム</title>
      <description>Summary:サマリを記述しました</description>
      <pubDate>Thu, 05 Jun 2008 16:38:27 +0900</pubDate>
      <a10:content type="text">content:アイテムの中身Item content</a10:content>
    </item>
  </channel>
</rss>
リスト2 WCFで生成したRSS 2.0のフィードの例

 同じ内容をAtom 1.0で生成した場合を以下に示す。要素が若干増えている。

<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="ja-jp" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">title:これはフィードのタイトルです</title>
  <subtitle type="text">description:サイトの概要</subtitle>
  <id>uuid:df966c3d-e78d-48de-91d3-666065ba6b57;id=1</id>
  <rights type="text">copyright(c) Digital Advantage</rights>
  <updated>2008-06-05T18:55:15+09:00</updated>
  <generator>.NET Framework WCF</generator>
  <link rel="alternate" href="http://www.hoge.jp/" />
  <entry>
    <id>uuid:df966c3d-e78d-48de-91d3-666065ba6b57;id=2</id>
    <title type="text">title:最初のアイテム</title>
    <summary type="text">Summary:サマリを記述しました</summary>
    <published>2008-06-05T18:55:15+09:00</published>
    <updated>2008-06-05T09:55:15Z</updated>
    <link rel="alternate" href="http://www.hoge.jp/index.html" />
    <content type="text">content:アイテムの概要</content>
  </entry>
</feed>
リスト3 WCFで生成したAtom 1.0のフィード

 

 INDEX
  実践! WCFプログラミング
  第1回 WCFを使用してRSS/Atomフィーダを作成する
  1.WCFとは?/RSS/Atomとは?
    2.RSS/Atomフィーダのプログラミング
    3.フィード本体の作成
    4.実際にどのように配信するか?/IISでフィードを配信する
 
インデックス・ページヘ  「実践! WCFプログラミング」


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 記事ランキング

本日 月間