意外となんとかなる日記

世迷言を心に、綺麗事を頭に

スポンサーリンク

【RSSリーダー】フィードを保存するクラス生成までは完成?

ようやくクラスに値をセットすることができるようになりました。

    private void button1_Click(object sender, EventArgs e)
    {
      // RSSフィードを読み込む

      // アドレス指定
      string url = "http://news.yahoo.co.jp/pickup/computer/rss.xml";
      getRssDataTest(url);
    }

    public void getRssDataTest(string linkUrl)
    {
      // 指定アドレスの読み込み
      XDocument doc = XDocument.Load(linkUrl);
      Feed feed = new Feed();

      // タイトル取り出し
      feed.Title = doc.XPathSelectElement("/rss/channel/title").Value;

      // LINQで取り出し(今後ラムダ式で置き換えられないか検討)
      var elemSel = from e in doc.XPathSelectElements("/rss/channel/item")
                    select new
                    {
                      title = (string)e.Element("title").Value,
                      url = (string)e.Element("link").Value,
                      pubDate = (string)e.Element("pubDate").Value
                    };

      // FeedItemクラスに格納
      foreach (var elem in elemSel)
        feed.Items.Add(new FeedItem(elem.title, elem.url, elem.pubDate));

      // 画面に表示
      label1.Text = feed.Title;         //見出し
      listBox1.DisplayMember = "Title"; // Title列
      listBox1.ValueMember = "Url";     // Url列
      listBox1.DataSource = feed.Items.ToArray();  // ArrayListを格納
    }

LINQを使用してクラスに格納し、リストボックスのDataSourceに格納しています。

次はDatasetに格納しようかと考えていたのですが、あまりサンプルが見当たらないです。そもそもDatasetに格納するという考え方が古いのかもしれませんので、この形で次のステップに行きたいと考えてます。

    public void getRssDataTestRambda(string linkUrl)
    {
      // 指定アドレスの読み込み
      XDocument doc = XDocument.Load(linkUrl);
      Feed feed = new Feed();

      // タイトル取り出し
      //feed.Title = doc.XPathSelectElement("/rss/channel/title").Value;

      // ラムダ式?
      Func<string, string, string, FeedItem> f = 
        (title, link, pubDate) =>
        { return new FeedItem(title, link, pubDate); };

      foreach (var e in doc.XPathSelectElements("/rss/channel/item"))
        feed.Items.Add(f(
          (string)e.Element("title").Value, 
          (string)e.Element("link").Value, 
          (string)e.Element("pubDate").Value));

      // 画面に表示
      label1.Text = feed.Title;         //見出し
      listBox1.DisplayMember = "Title"; // Title列
      listBox1.ValueMember = "Url";     // Url列
      listBox1.DataSource = feed.Items.ToArray();  // ArrayListを格納
    }

参考までにラムダ式(?)版も考えてみました。どちらでも同じように見えるので、個人的に好きなラムダ式を使用して進めていきます。

スポンサーリンク