2018/03/17

.NET CoreでサイトのRSSフィードを検索してコンソールに出力する


前の記事では、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

スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。なんちゃってSE。

    フリーウェア、Webサービス開発のためにEntyで支援を受け付けています。ご支援のほどよろしくお願いいたします。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。


    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ
    >>ブログ詳細

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから


最近の記事