はてなブログの 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; }
}
}
実行結果は下の通り。
今回選んだのがはてなブログだったというだけで、
URL さえ分かっていれば他の RSS フィードでも同じようにダウンロードしてパースできる。