前の記事では、CodeHollow.FeedReader というライブラリを使用して RSS フィードの内容をコンソールに出力しましたが、今度はサイトの中にある RSS フィードを同じライブラリを使用して検索しアドレスをコンソールに出力してみます。
なお、環境は Mac (macOS High Sierra 10.13.3) 、 .NET Core SDK 2.1.4、Visual Studio Codeで、CodeHollow.FeedReader のインストール方法は前の記事を参照してください。
相変わらずコンソールアプリケーションでは、非同期処理が分かりにくいですがそこを除けばまずます分かりやすい内容ではないでしょうか。なお、検索対象とするサイトは当ブログになっています。
using CodeHollow.FeedReader; using System.Threading.Tasks; using System.Xml; //(中略) static void Main(string[] args) { //この Task#Wait() の記法はコンソールアプリだけ。GUIではデッドロックになる。 Task task = SearchFeedsAsync(); task.Wait(); } static async Task SearchFeedsAsync(){ //URLを設定 string url = "http://fnya.cocolog-nifty.com/blog/"; string feedUrl = string.Empty; try { //RSSフィード検索 var urls = await FeedReader.GetFeedUrlsFromUrlAsync(url); if (urls.Count() < 1) { //URLがRSSフィードの場合はURLをセット if (await IsValidRss(url)){ feedUrl = url; } else { Console.WriteLine("RSSフィードが存在しません。"); } } else if (urls.Count() >= 1) { feedUrl = urls.First().Url; } } catch { Console.WriteLine("RSSフィードが存在しません。"); } //RSSフィードが見つかったらURLを出力 if (feedUrl != string.Empty) { Console.WriteLine("Feed Url:{0}", feedUrl); } } static async Task IsValidRss(string url) { try { //RSSフィードが読めるかチェック var reader = await FeedReader.ReadAsync(url); if (reader.Items.Count >= 1) { return true; } else { return false; } } catch { return false; } }
これを実行すると、以下のように RSS フィードのアドレスが正しく出力されました。
$ dotnet run Feed Url:http://fnya.cocolog-nifty.com/blog/atom.xml