はてなブログの RSS フィードをダウンロードしてパースする

はてなブログRSS フィードをダウンロードしてパースするサンプルを書いてみた。 RSS フィードのダウンロードは HttpClient.GetStringAsync で一発。 RSS フィードは所詮 XML なので、パースは LINQ to XML でこれまた一発。

簡単過ぎてわざわざブログに書くまでもないかと思ったけど、 LINQ to XML 使う箇所はうっかり忘れてしまいそうな気がしたので、 外部記憶として書いておくことにした。

using System;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace RssSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "RssSample";

            MainAsync().GetAwaiter().GetResult();

            Console.ReadLine();
        }

        static async Task MainAsync()
        {
            var client = new HttpClient();

            var rss = await client.GetStringAsync(
                "https://tnakamura.hatenablog.com/rss");

            var xdoc = XDocument.Parse(rss);

            var items = from a in xdoc.Descendants()
                        where a.Name == "item"
                        let title = from b in a.Descendants()
                                    where b.Name == "title"
                                    select b.Value
                        let link = from c in a.Descendants()
                                   where c.Name == "link"
                                   select c.Value
                        select new Item
                        {
                            Title = title.FirstOrDefault(),
                            Link = link.FirstOrDefault(),
                        };

            foreach (var i in items)
            {
                Console.WriteLine(i.Title);
                Console.WriteLine(i.Link);
                Console.WriteLine();
            }
        }
    }

    public class Item
    {
        public string Title { get; set; }

        public string Link { get; set; }
    }
}

実行結果は下の通り。

f:id:griefworker:20180802164727p:plain

今回選んだのがはてなブログだったというだけで、 URL さえ分かっていれば他の RSS フィードでも同じようにダウンロードしてパースできる。