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

C#

はじめに

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

RSSを読み込む

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

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

    public string Description { get; set; }

    public string Link { get; set; }

    public string LastBuildDate { get; set; }
}

/// 
/// RSSのITEMセクション情報プロパティ
/// 
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 elementItems = channelElement.Elements("item");

        List rssItemInfos = new List();
        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の子要素として対象サイトのメイン情報と、記事の情報、画像情報などがあります。
私のサイトの情報は下記の通りです。


  FEELD BLOG
  
  https://feeld-uni.com
  FEEL + FIELD = FEELD. 感じたままビジネスからプログラミング・デザイン等 日々興味を持った分野の情報を配信しています
  Sat, 21 Dec 2019 13:43:10 +0000
  ja
  
    FEELD BLOG
    https://feeld-uni.com
    ・・・
  
  ・・・
  
    Visual Studio for MacでC#コンソールアプリを作るまで
    https://feeld-uni.com/entry/2019/12/21/224310
    Sat, 21 Dec 2019 13:43:10 +0000
    ・・・
    
  
  ・・・

(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記事の情報を取得するようにしています。
サイトによっては取得できる情報も変わります。
それぞれパターンを用意しておくこと良いかと思います。

タイトルとURLをコピーしました