My boss recently showed me a pretty handy bunch of classes for generating RSS and ATOM feeds, all built into dot net.
Start by adding a new reference to your project; System.Services.Web.
The SyndicationFeed class holds all the data about your feed and lets you spit everything out in a number of different formats (RSS2.0, ATOM1.0)- each item in the feed is held in a generic list of SyndicationItem objects. As I work for a publishers, I was creating an RSS feed of coming soon books so I added an extension method to my book class- ToSyndicationItem();
public static SyndicationItem ToSyndicationItem(this Book book)
{
return new SyndicationItem(book.CoverTitle + " " + book.Subtitle, book.Description, new Uri(book.GetURL()))
{
Summary = new TextSyndicationContent(book.DescriptionShort, TextSyndicationContentKind.Plaintext),
Id = book.Id.ToString(),
LastUpdatedTime = book.InsertedDate
};
}
This allows me to use all the standard select methods I already in my book class, to also populate my RSS feed. So to create the feed all I need do in my RSS.ashx handler file is;
List<Book> books = Book.GetBookPublishedBetween(DateTime.Now,DateTime.Now.AddDays( int.Parse( GroupConstants.ComingSoonMaxDays)));
List<SyndicationItem> syndicationItems = new List<SyndicationItem>();
foreach (Book book in books)
syndicationItems.Add(book.ToSyndicationItem());
feed = new SyndicationFeed(syndicationItems)
{
Title = new TextSyndicationContent("Coming Soon Titles"),
Description = new TextSyndicationContent("Forthcoming publications."),
BaseUri = new Uri(LinkHelper.GetBaseUrl())
};
var output = new StringWriter();
var writer = new XmlTextWriter(output);
new Rss20FeedFormatter(feed).WriteTo(writer);
context.Response.ContentType = "application/rss+xml";
context.Response.Write(output.ToString());
Related posts:










