RSSフィードの読込ライブラリ比較
Feed URL
Feed URLは以下を使いました。
https://news.yahoo.co.jp/pickup/computer/rss.xml
CodeHollow.FeedReader
CodeHollowのFeedReader
https://github.com/codehollow/FeedReader
サンプルソース
サンプルソース元は以下を使いました。
https://github.com/codehollow/FeedReader/blob/master/FeedReader.ConsoleSample/FeedReader.ConsoleSample.csproj
使い方
FeedReader.ReadAsync1行でRssを 読込み変数へセットします。
var reader = await FeedReader.ReadAsync(url);
子要素でループしたい場合には以下のように使います
var reader = await FeedReader.ReadAsync(url);
foreach (var item in reader.Items)
{
Console.WriteLine(item.Title + " - " + item.Link);
}
結果

Microsoft.SyndicationFeed.ReaderWriter
Microsoft製のReaderWriterです。
https://github.com/dotnet/SyndicationFeedReaderWriter
使い方
サンプルソース元は以下をベースに使いました。
https://github.com/dotnet/SyndicationFeedReaderWriter/blob/master/examples/ReadRssItemWithCustomFieldsExample.cs
RssFeedReader で読込を開始し、feedReader.Read()で逐次読み込んで行きます。
RssFeedReader ではRSSの読込(HTTPリクエスト)は開始せず、最初のfeedReader.Read()でHTTPリクエストを投げる仕様のようです。
feedReader.Read()はboolで読込が継続可能か否かが返るようです。
[AsyncStateMachine(typeof(<Read>d__4))]
public override Task<bool> Read();
使い方サンプル
以下をベースにしています。
https://github.com/dotnet/SyndicationFeedReaderWriter/blob/master/examples/ReadRssItemWithCustomFieldsExample.cs
//
// Create an XmlReader from file
using (var xmlReader = XmlReader.Create(filepath, new XmlReaderSettings() { Async = true }))
{
var parser = new RssParser();
var feedReader = new RssFeedReader(xmlReader, parser);
//
// Read the feed
while (await feedReader.Read())
{
if (feedReader.ElementType == SyndicationElementType.Item)
{
//
// Read the item as generic content
ISyndicationContent content = await feedReader.ReadContent();
//
// Parse the item if needed (unrecognized tags aren't available)
// Utilize the existing parser
ISyndicationItem item = parser.CreateItem(content);
Console.WriteLine($"Item: {item.Title}");
//
// Get <example:customElement> field
ISyndicationContent customElement = content.Fields.FirstOrDefault(f => f.Name == "example:customElement");
if (customElement != null)
{
Console.WriteLine($"{customElement.Name}: {customElement.Value}");
}
}
}
}
結果

SimpleFeedReader
RobThree/SimpleFeedReader
https://github.com/RobThree/SimpleFeedReader
パッケージを読み込めませんでした。Coreには対応していないようです。
nJupiter
njupiter/njupiter
https://github.com/njupiter/njupiter
警告が出てしまいました。
パッケージ 'nJupiter.Web.Syndication 4.0.2.516' はプロジェクトのターゲット フレームワーク '.NETCoreApp,Version=v2.0' ではなく '.NETFramework,Version=v4.6.1' を使用して復元されました。
このパッケージは、使用しているプロジェクトとの完全な互換性がない可能性があります。
総括
CodeHollow.FeedReaderは1行でフィードが取得できるところが魅力です。
Microsoft.SyndicationFeed.ReaderWriterは細かく制御したい場合に使うのでしょう。(今のところ利用シーンが想像できませんが)
SimpleFeedReaderとnJupiterはCoreで動作しなかったので試せずでした。
コード
今回のテストコードは以下に置いています
https://github.com/sugasaki/CSharpFeedReader