System.ServiceModel.Syndicationクラスを利用してRSS2.0,ATOM形式でフィードを作成する。

ブログなどの更新通知に利用されるRSS/AtomフィードをSystem.ServiceModel.Syndicationクラスを利用して作成します。今日から日記にRSSをつけたので、よかったら購読お願いします。RSSはブログタイトルの右隣からどうぞ。


さて、今回はtekkの日記の2010年度、人気記事ベスト3をRSSで出力してみます。はてなカウンターで、2010年度のアクセスランキングを確認すると以下の結果となりました。


・1位
どんなオブジェクトでもコピーできる汎用のディープコピー処理(ICloneable, MemberWiseClone, Serializable, BinaryFormatter, MemoryStream) - tekkの日記 C#,VB.NET

・2位
Windowsサービスを作成する。(System.Configuration.Install.Installer,System.ServiceProcess.ServiceBase) - tekkの日記 C#,VB.NET

・3位
WinMergeをコマンドラインから利用する。 - tekkの日記 C#,VB.NET


1位は、ダントツでディープコピー。使い勝手の良いテクニックなので根強い人気です。フィードはSystem.ServiceModel.Syndicationクラスを使用して作成します。以下、サンプルです。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.ServiceModel.Syndication;

namespace FeedTest
{
class Program
{
static void Main(string[] args)
{

SyndicationFeed feed = new SyndicationFeed();

feed.Title = new TextSyndicationContent("tekk diary best 3 topic");
feed.Links.Add(new SyndicationLink(new Uri("http://d.hatena.ne.jp/tekk/")));

List feedItemList = new List();

SyndicationItem feedItem = null;

feedItem = new SyndicationItem();

feedItem.Title = new TextSyndicationContent("どんなオブジェクトでもコピーできる汎用のディープコピー処理(ICloneable, MemberWiseClone, Serializable, BinaryFormatter, MemoryStream)");
feedItem.Links.Add(new SyndicationLink(new Uri("http://d.hatena.ne.jp/tekk/20100131/1264913887")));

feedItemList.Add(feedItem);

feedItem = new SyndicationItem();

feedItem.Title = new TextSyndicationContent("Windowsサービスを作成する。(System.Configuration.Install.Installer,System.ServiceProcess.ServiceBase)");
feedItem.Links.Add(new SyndicationLink(new Uri("http://d.hatena.ne.jp/tekk/20100109/1263043544")));

feedItemList.Add(feedItem);

feedItem = new SyndicationItem();

feedItem.Title = new TextSyndicationContent("WinMergeコマンドラインから利用する。");
feedItem.Links.Add(new SyndicationLink(new Uri("http://d.hatena.ne.jp/tekk/20091206/1260072906")));

feedItemList.Add(feedItem);

feed.Items = feedItemList;

XmlWriter writer = null;

// Atom形式で保存
writer = XmlWriter.Create("atom.xml");
feed.SaveAsAtom10(writer);
writer.Close();

// Rss2.0形式で保存
writer = XmlWriter.Create("rss.xml");
feed.SaveAsRss20(writer);
writer.Close();


}
}
}