How to generate RSS feeds without any 3rd party components
RSS feeds are widely used in today’s internet world. Thus we, developers, have to implement it on our websites and projects most of the time. There are many free and paid components that generates RSS feeds but in fact you may generate it by yourself as well.
I will post a generic handler’s source code to show you how to do that.
Post is a class that has some basic properties like Url, Title, Teaser, etc. You may need to write your own class and implement these properties in a basic manner. Then you will need to create a GetPosts() method that returns a list of Post objects.
<%@ WebHandler Language="C#" Class="Rss" %>
using System;
using System.Web;
using System.Text;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
public class Rss : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = Encoding.UTF8;
context.Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
XmlTextWriter xmlWriter = new XmlTextWriter(context.Response.Output);
xmlWriter.WriteStartElement("rss");
xmlWriter.WriteAttributeString("version", "2.0");
xmlWriter.WriteAttributeString("xmlns:dc", "http://purl.org/dc/elements/1.1/");
xmlWriter.WriteStartElement("channel");
#region Channel Details
xmlWriter.WriteStartElement("title");
xmlWriter.WriteCData("Sunali.com");
xmlWriter.WriteEndElement(); // end title
xmlWriter.WriteStartElement("link");
xmlWriter.WriteCData("http://sunali.com");
xmlWriter.WriteEndElement(); // end link
xmlWriter.WriteStartElement("description");
xmlWriter.WriteCData("Sunali.com Posts RSS Feed");
xmlWriter.WriteEndElement(); // end description
xmlWriter.WriteStartElement("language");
xmlWriter.WriteString("tr-TR");
xmlWriter.WriteEndElement(); // end language
xmlWriter.WriteStartElement("pubDate");
xmlWriter.WriteString(DateTime.Now.ToString("ddd, dd MMM yyyy hh:mm:ss zz"));
xmlWriter.WriteEndElement(); // end pubDate
#endregion
// You are supposed to write your GetPosts method by yourself.
List<Post> posts = GetPosts();
foreach (Post post in posts)
{
xmlWriter.WriteStartElement("item");
xmlWriter.WriteStartElement("title");
xmlWriter.WriteCData(post.Title);
xmlWriter.WriteEndElement(); // end title
xmlWriter.WriteStartElement("link");
xmlWriter.WriteCData(post.Url);
xmlWriter.WriteEndElement(); // end link
xmlWriter.WriteStartElement("description");
xmlWriter.WriteCData(post.Teaser);
xmlWriter.WriteEndElement(); // end description
xmlWriter.WriteStartElement("dc:creator");
xmlWriter.WriteCData(post.AuthorName);
xmlWriter.WriteEndElement(); // end dc:creator
xmlWriter.WriteStartElement("pubDate");
xmlWriter.WriteString(post.PublishDate.ToString("ddd, dd MMM yyyy hh:mm:ss zz"));
xmlWriter.WriteEndElement(); // end pubDate
xmlWriter.WriteStartElement("guid");
xmlWriter.WriteAttributeString("isPermaLink", "false");
xmlWriter.WriteCData(post.Url);
xmlWriter.WriteEndElement(); // end guid
xmlWriter.WriteEndElement(); // end item
}
xmlWriter.WriteEndElement(); // end channel
xmlWriter.WriteEndElement(); // end rss
}
public bool IsReusable {
get {
return false;
}
}
}