Overview
Rather than post another article about setting up and using third party tools with .NET MVC, I thought I would take a slightly different approach this time and write a programming with .NET article based on something I have had to do whilst creating Jambr.
I had the requirement to create an RSS feed for both the Articles and News sections of the site so you lovely readers could subscribe to either of them, I haven't actually had to create RSS feeds before so had to do some digging to find the best route to go down. I read numerous programming articles on line and compiled a simple class which enables me to create an RSS2.0 compliant feed, as seen here.
Using the Code
Rather than putting all 237 lines of code in here, I have uploaded the class for you, you can
download it from here. Just pop it into your project and use it like this:
- Firstly, you need to create an instance of the object (apologies if I'm teaching you to suck eggs!):
Dim rssfeed As New RSSFeed()
- Next, you need to create the channel. RSS2.0 feeds can only have one channel so you're only able to call this method once:
rssfeed.CreateChannel("Jambr - News"
"Http://www.jambr.co.uk/News",
"Jambr News",
Now,
"en-GB")
- And now, you add your items. Obviously, you need to loop through the objects you want in your feed and add them, but we'll add just one example here:
rssfeed.WriteRSSItem("This is an item",
"http://www.yoursite.com",
"Karl",
Now,
"This is the description",
Guid.NewGuid.ToString)
- Finally, after you've added your items, you can return the
string
of the XML document. I'm coding around .NET MVC 4 so as a result, I return the XML document to the user like this:
Return Content(rssfeed.ToString, "text/xml")
It is worth noting that I have included additional parameters on both the CreateChannel
and WriteRSSItem
methods which enables you to add Categories (in the context of Jambr, I tag all articles to enable them to be categorised) and Content (which will be added to the content:encoded
tag). To add category tags, pass them as an array of KeyValuePair(of String, String)
objects. To add the content, pass it as a string
.
rssfeed.WriteRSSItem("This is an item",
"http://www.yoursite.com",
"Karl",
Now,
"This is the description",
Guid.NewGuid.ToString,
"This is the full body of the post",
{New KeyValuePair(Of String, String)("Tag1", "/Articles/?Tag=Tag1")})
A Few Issues I Encountered
There were a few issues I encountered whilst trying to ensure the feed was RSS 2.0 compliant which are sorted in this code, for example:
- Date Times needed to be in the correct format (Sat, 07 Sep 2002 9:42:31 GMT), luckily
.ToString("r")
on a datetime
object handles that.
- Adding custom namespaces to the root rss element of the document, and then actually enabling me to write tags which reference that namespace. For example,
<dc:creator>
tags.
I hope that helps! Any questions, please ask.