LoginSignup
0
0

More than 5 years have passed since last update.

ASP.NET > ASP.NET Core > RSSフィードの読込ライブラリ比較

Posted at

RSSフィードの読込ライブラリ比較

Feed URL

Feed URLは以下を使いました。
https://news.yahoo.co.jp/pickup/computer/rss.xml

CodeHollow.FeedReader

image.png

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

image.png

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

image.png

RobThree/SimpleFeedReader
https://github.com/RobThree/SimpleFeedReader

パッケージを読み込めませんでした。Coreには対応していないようです。
image.png

nJupiter

image.png

njupiter/njupiter
https://github.com/njupiter/njupiter

警告が出てしまいました。

image.png

image.png

パッケージ '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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0