// // RssFormatter.cs // // Author: // paul <${AuthorEmail}> // // Copyright (c) 2015 paul // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . using System; using System.Net.Http.Formatting; using System.Net.Http.Headers; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Web.Mvc; using System.Net; using Yavsc.Model; using System.Text; namespace Yavsc.Formatters { /// /// Rss feeds formatter. /// public class RssFeedsFormatter:SimpleFormatter { string doctype = ""; /// /// Initializes a new instance of the class. /// public RssFeedsFormatter () : base ("application/rss+xml") { } private const string dateformat = "ddd, dd MMM yyyy HH:mm:ss K"; /// /// Writes to stream. /// /// Type. /// Value. /// Stream. /// Content headers. public override void WriteToStream (Type type, object value, Stream stream, HttpContentHeaders contentHeaders) { RssFeedsChannel feeds = value as RssFeedsChannel; using (var writer = new StreamWriter (stream)) { TagBuilder rss = new TagBuilder ("rss"); rss.Attributes.Add ("version", "2.0"); TagBuilder channel = new TagBuilder ("channel"); TagBuilder title = new TagBuilder ("title"); TagBuilder description = new TagBuilder ("description"); TagBuilder lastBuildDate = new TagBuilder ("lastBuildDate"); TagBuilder link = new TagBuilder ("link"); title.InnerHtml = MvcHtmlString.Create (feeds.Title).ToHtmlString (); description.InnerHtml = MvcHtmlString.Create (feeds.Description).ToHtmlString (); lastBuildDate.InnerHtml = MvcHtmlString.Create (feeds.LastBuildDate.ToString (dateformat)).ToHtmlString (); link.InnerHtml = MvcHtmlString.Create (feeds.Link).ToHtmlString (); StringBuilder sb = new StringBuilder (); foreach (RssFeedsEntry e in feeds.Entries) { TagBuilder item = new TagBuilder ("item"); TagBuilder ititle = new TagBuilder ("title"); ititle.InnerHtml = e.Title; TagBuilder idescription = new TagBuilder ("description"); idescription.InnerHtml = MvcHtmlString.Create (e.Description).ToHtmlString (); TagBuilder ipubDate = new TagBuilder ("pubDate"); ipubDate.InnerHtml = MvcHtmlString.Create ( e.PubDate.ToString (dateformat)).ToHtmlString (); TagBuilder ilink = new TagBuilder ("link"); ilink.InnerHtml = MvcHtmlString.Create (e.Link).ToHtmlString (); item.InnerHtml = ititle.ToString () + "\n" + idescription.ToString () + "\n" + ipubDate.ToString () + "\n" + ilink.ToString () + "\n"; sb.Append (item.ToString () + "\n"); } channel.InnerHtml = title.ToString () + "\n" + description.ToString () + "\n" + lastBuildDate.ToString () + "\n" + link.ToString () + "\n" + sb.ToString () + "\n"; rss.InnerHtml = channel.ToString (); writer.WriteLine (doctype); writer.Write (rss.ToString ()); } } } }