2008年9月16日火曜日

Feedの配信

もちろんASP.NET MVCで。

Feed自体はXMLなんで、XMLのレスポンスを返すようなPageを書けばそれで完了! でもそんなのかっこよくないよね。

んじゃどうすんだって、もちろんSyndicationFeedクラスでしょ! WCFじゃないと使えないってことはもちろんなくて、普通に使えるっしょ!

    public ActionResult Feed(string id, string format)
    {
      // データのロード
      var data = (LINQでアイテム抽出).Take(20).ToList();
     
      // 全体かタグのFeed
      var feed = new SyndicationFeed("フィードのタイトル", "", new Uri("サイトのURLとか"));
      var items = new List();
      foreach (var post in data)
      {
        items.Add(new SyndicationItem("アイテムのタイトル", "アイテムのコンテンツ", new Uri("アイテムのURL"), "ユニークなID", 更新日時));
      }
      feed.Items = items;

      SyndicationFeedFormatter formatter = null;
      string contentType;
      if (string.IsNullOrEmpty(format) || format.ToLower() == "atom")
      {
        formatter = new Atom10FeedFormatter(feed);
        contentType = "application/atom+xml";
      }
      else
      {
        formatter = new Rss20FeedFormatter(feed);
        contentType = "application/rss+xml";
      }

      var stream = new StringWriter();
      var xml = new XmlTextWriter(stream);
      formatter.WriteTo(xml);

      return Content("" + stream.ToString(), contentType);

    } 

↑こんなアクションを書く。

※XMLのヘッダが出力されないからって固定で書いて追加してるのはかっこわるい...。

これで、Viewなんて定義しなくてもいいよね!

話変わるけど、いつの間にやらStackoverflow.comが公開されてました。 Hottest "asp.net-mvc" Questions - Stack Overflow

↑とりあえずこのカテゴリだけでも超タメになるっす! Is anyone using the ASP.NET MVC Framework on live sites? - Stack Overflow この質問が切ない。