.NET Framework 3.5 から System.ServiceModel.Syndication なんてカッコイイ名前空間が増えてまして。 これを使うと、 サックリと Web サーバーから RSS が読み込めるのですな。
こんな感じで。
WebClient svc = new WebClient();
svc.Encoding = new UTF8Encoding(); //ちぃっ、ちゃんとレスポンスヘッダを見ろよ~ (--;
string rssString = svc.DownloadString(url);
StringReader stringReader
= new StringReader(rssString);
XmlReader reader
= XmlReader.Create(stringReader);
SyndicationFeed feed
= SyndicationFeed.Load(reader);
で、 この SyndicationFeed オブジェクトが持っている Items コレクションに、 SyndicationItem が入ってくるわけ。 おまけに、 これは Silverlight 3 でも使えるらしい。
と、 ここまでは良かったんですが。 SyndicationFeed ってば、 Atom 1.0 と RSS 2.0 しか読んでくれない。 まだまだ多い RSS 1.0 を読ませると、 そんなもんシラン、 と… orz
うゎ、 そりゃないでしょ~、 とボヤきながらも探してみれば。 ちゃんと神はいらっしゃる f(^^;
March 18, 2009
Syndicating and Consuming RSS 1.0 (RDF) Feeds in ASP.NET 3.5
By Scott Mitchell
このページからダウンロードできる Mitchell 氏が作った Rss10FeedFormatter を使えば、 RSS 1.0 を読み込むことができます。
さきほどの最後の行
SyndicationFeed feed
= SyndicationFeed.Load(reader);
を、 次のように変更します。
skmFeedFormatters.Rss10FeedFormatter formatter
= new skmFeedFormatters.Rss10FeedFormatter();
formatter.ReadFrom(reader);
SyndicationFeed feed = formatter.Feed;
これで RSS 1.0 が読み込めます。 ( 逆に、 これだけだと RSS 1.0 しか読めません。 )
また、 RSS 1.0 のすべての要素を読み込んでくれるわけではないです。 まぁ、 ソースコードを直してしまえばいいんですけどね。