C#を利用してRSSフィードを読み込む


はじめに

今回は、Visual Studio for Macを利用してRSS情報を読み取る処理をメモとして残しておきます。

RSSを読み込む

RSS情報を読み込みます。
ここでは、RSSを読み込み、標準出力で結果を出力しています。

/// <summary>
/// RSS基本情報
/// </summary>
private class RssInfo
{
    public string Title { get; set; }

    public string Description { get; set; }

    public string Link { get; set; }

    public string LastBuildDate { get; set; }
}

/// <summary>
/// RSSのITEMセクション情報プロパティ
/// </summary>
private class RssItemInfo
{
    public string Title { get; set; }

    public string Link { get; set; }

    public string PubDate { get; set; }
}

static void Main(string[] args)
{
    Console.WriteLine($"RSS情報を読み込む");

    // 取得する記事の件数
    int readCnt = 3;

    try
    {
        string rss = "https://feeld-uni.com/feed";
        XElement element = XElement.Load(rss);

        // channelを取得する・・・(1)
        XElement channelElement = element.Element("channel");

        RssInfo rssInfo = new RssInfo();
        rssInfo.Title = channelElement.Element("title").Value;
        rssInfo.Description = channelElement.Element("description").Value;
        rssInfo.Link = channelElement.Element("link").Value;
        rssInfo.LastBuildDate = channelElement.Element("lastBuildDate").Value;

        // itemを取得する・・・(2)
        IEnumerable<XElement> elementItems = channelElement.Elements("item");

        List<RssItemInfo> rssItemInfos = new List<RssItemInfo>();
        int cnt = 0;
        foreach(XElement elmItem in elementItems)
        {
            // 取得記事数が指定数に到達したらループ処理終了
            if (cnt == readCnt)
            {
                break;
            }
            RssItemInfo itemInfo = new RssItemInfo();
            itemInfo.Title = elmItem.Element("title").Value;
            itemInfo.Link = elmItem.Element("link").Value;
            itemInfo.PubDate = elmItem.Element("pubDate").Value;
            rssItemInfos.Add(itemInfo);
            cnt++;
        }

        // RSS情報を出力・・・(3)
        Console.WriteLine("------------------------------------------------");
        Console.WriteLine("RSS Information");
        Console.WriteLine("------------------------------------------------");
        Console.WriteLine($"Title         : {rssInfo.Title}");
        Console.WriteLine($"Description   : {rssInfo.Description}");
        Console.WriteLine($"Link          : {rssInfo.Link}");
        Console.WriteLine($"LastBuildDate : {rssInfo.LastBuildDate}");
        Console.WriteLine();

        Console.WriteLine("------------------------------------------------");
        Console.WriteLine("RSS Item Information");
        Console.WriteLine("------------------------------------------------");

        foreach(RssItemInfo itemInfo in rssItemInfos)
        {
            Console.WriteLine($"Title         : {itemInfo.Title}");
            Console.WriteLine($"PubDate       : {itemInfo.PubDate}");
            Console.WriteLine($"Link          : {itemInfo.Link}");
            Console.WriteLine();
        }

    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
        Console.WriteLine(e.StackTrace);
    }
}

(1)・・・RSS情報で取得したXMl情報のchannelタグを読み込みます。channelの子要素として対象サイトのメイン情報と、記事の情報、画像情報などがあります。
私のサイトの情報は下記の通りです。

<channel>
  <title>FEELD BLOG</title>
  <atom:link href="https://feeld-uni.com/feed" rel="self" type="application/rss+xml" xmlns:atom="http://www.w3.org/2005/Atom" />
  <link>https://feeld-uni.com</link>
  <description>FEEL + FIELD = FEELD. 感じたままビジネスからプログラミング・デザイン等 日々興味を持った分野の情報を配信しています</description>
  <lastBuildDate>Sat, 21 Dec 2019 13:43:10 +0000</lastBuildDate>
  <language>ja</language>
  <image>
    <title>FEELD BLOG</title>
    <link>https://feeld-uni.com</link>
    ・・・
  </image>
  ・・・
  <item>
    <title>Visual Studio for MacでC#コンソールアプリを作るまで</title>
    <link>https://feeld-uni.com/entry/2019/12/21/224310</link>
    <pubDate>Sat, 21 Dec 2019 13:43:10 +0000</pubDate>
    ・・・
    <description><![CDATA[インストール まずは、Visual Studio for Macのインストールを行います。以下のURLにアクセスし、「Visual Studio for Macをダウンロード」をクリックします。 Visual Studi […]]]></description>
  </item>
  ・・・
</channel>

(2)・・・channelの子要素である「item」情報をすべて取得します。今回の例では3記事まで情報を取得しています。

(3)・・・一度情報を取得後、標準出力で出力しています。結果は下記の通りです。

RSS情報を読み込む
------------------------------------------------
RSS Information
------------------------------------------------
Title         : FEELD BLOG
Description   : FEEL + FIELD = FEELD. 感じたままビジネスからプログラミング・デザイン等 日々興味を持った分野の情報を配信しています
Link          : https://feeld-uni.com
LastBuildDate : Sat, 21 Dec 2019 13:43:10 +0000

------------------------------------------------
RSS Item Information
------------------------------------------------
Title         : Visual Studio for MacでC#コンソールアプリを作るまで
PubDate       : Sat, 21 Dec 2019 13:43:10 +0000
Link          : https://feeld-uni.com/entry/2019/12/21/224310

Title         : XMLデータをDataSetに読み込む方法
PubDate       : Sun, 15 Dec 2019 11:48:33 +0000
Link          : https://feeld-uni.com/entry/2019/12/15/204833

Title         : [C#] List型データをSqlBulkCopyする
PubDate       : Wed, 06 Nov 2019 12:29:58 +0000
Link          : https://feeld-uni.com/entry/2019/11/06/212958

最後に

いかがでしたでしょうか、今回は1サイトのブログから3記事の情報を取得するようにしています。
サイトによっては取得できる情報も変わります。
それぞれパターンを用意しておくこと良いかと思います。