I have started the implementation of my project in C# Express Edition, and one of the first things I have stumbled upon is the frustration of having to deal with many different XML feed standards. There are RSS and Atom, each of them with several different sub-versions. But that's not all. We also have a slew of Internet cowboy hackers who don't have any desire at all to follow these standards. In short, RSS/Atom land is a jungle. Time to take out the machete! When researching the options of a suitable machete for the feed jungle, the following 3 caught my attention:
- Atom.NET + RSS.NET
- Microsoft's RSS library, included in IE7
- Rolling my own component based on .NET's XML support
Atom.NET + RSS.NET
These are two separate open-source libraries, implemented in C# .NET, which enables users to work with the two feed standards and all of their sub-standards through a .NET programming interface. Unfortunately the two components expose two interfaces without much similarity. In addition to this the program is not in active development any longer Instead the author is creating a commercial closed source version of the components.
When registering the copy of Visual Studio 2005 Express Edition, one of the freebies that Microsoft offer you is a license of IP*Works' RSS component. The word free was misleading me for a while, until I realized that I was being offered a free developer license only, without any rights to distribute the component with the applications you are building in Express.
Microsoft's RSS library, included in IE7
With the upcoming Internet Explorer 7 (included in Beta2), Microsoft has really outdone themselves with the RSS/Atom support. Included in the browser will be a feed repository that any application can use to know which feeds are of interest to a user. Also articles and their read/unread state will be stored here. However, IE7 requires Windows XP or above, cutting off a large piece of the current end-user segment.
Rolling my own component based on .NET's XML support
Of course, being a developer, you are always attracted by the possibility of rolling everything yourself. However, considering the abundance of RSS/Atom formats out there, this would be suicide if I attempted this during the short time available to build FeedJournal within the contest.
After some prototyping with the different options I decided to go with the open-source Atom.NET and RSS.NET components. However, I quickly noticed some bugs and limitations, that I fixed in the components (the wonder of open-source!). I am wrapping Atom.NET and RSS.NET in my own classes "Article" and "Feed" which have different constructors for the different feed types.