Pages

Thursday, January 22, 2009

Using RSS Feeds with Asp.net

Introduction:

RSS stands for (Really Simple Syndication). Basically RSS feeds are xml files which are provided by many websites so you can view their contents on your own websites rather than browsing their site. Suppose you are a movie lover and you want to get the list of top 5 movies from 10 websites. One way will be to visit all 10 websites and see the top 5 list. This method though is used in general by lot of people but its quite tiring method. It will take you 10-15 minutes to browse all the websites and see the top 5 list of movies. One easy way will be if those movie websites provides RSS feeds to be used by the users. If they provide RSS feeds you can embed them in your page and now you don't have to browse all the websites since the information is available on a single page. Hence, this saves you a time and a lot of browsing.
Most of the Blogs websites provide RSS feeds so you can embed your or someone's else latest entries of blog on your website. In this article we will see how we can embed RSS feeds to our webform using Asp.net.

Making a simple user interface:

The application that we will build in this article will be really simple which extracts the Rss feeds from some website and display it in the datagrid. Below is the image of the User interface.
As you can see the user interface is pretty simple. It consists of a Label control which says "Rss Feeds". It has a datagrid and a button with the text "Display RSS Feeds". Let's now dig into the code behind and see what's happening behind the scenes.

Getting RSS Feeds from the website:

We have set up our interface and now our task is to find a website that provides Rss so we can display it on our webform. Luckily our own www.msdn.microsoft.com provides Rss feeds. This Rss feeds is about the latest news in the Microsoft industry. Here are the steps that you can use to get to the Rss feeds from the msdn website.
2) You will see a "RSS" link at the top as shown in the picture below:
// Gets the xml from the Url using XmlTextReader
XmlTextReader reader = new XmlTextReader("http://msdn.microsoft.com/rss.xml");
As you can see that we have used XmlTextReader to extract the Xml out of the url. The XmlTextReader has many overloads but we used the one which takes string url as a parameter. The parameter that we are sending is the url that you previously saved.
Now we got the Xml, next we put the xml into the dataset so we can bind it to the datagrid or else the datagrid will feel lonely :). So the next step is to create a DataSet object.
// creates a new instance of DataSet
DataSet ds = new DataSet();
After creating the DataSet we need to fill the dataset with the Xml. DataSet has a ReadXml method that will allow us to ReadXml.
// Reads the xml into the dataset
ds.ReadXml(reader);
Okay now the dataset, which is ds contains the xml. The final step will be to bind the dataset to the datagrid. Here is the line that binds the dataset to the datagrid.
// Assigns the datset to the datagrid
myDataGrid.DataSource = ds;
// Binds the datagrid
myDataGrid.DataBind();
Okay looks good to me. Lets run the application and see what will happen. When you press the button the xml is extracted from the specified url and will be bind to the datagrid. You will see something like this:
Well, we can see that it did got something from the url and binding is done okay. So what's wrong ? It seems like the data we were expecting is not correct. You can blame Microsoft for not providing us with the correct url but before that lets check our code again and see if we can fix it. The following code in button click event will fix the problem:
// Gets the xml from the Url using XmlTextReader
XmlTextReader reader = new XmlTextReader("http://msdn.microsoft.com/rss.xml");
// creates a new instance of DataSet
DataSet ds = new DataSet();
// Reads the xml into the dataset
ds.ReadXml(reader);
// Assigns the data table to the datagrid
myDataGrid.DataSource = ds.Tables[2];
// Binds the datagrid
myDataGrid.DataBind();

As you see we replaced the line where we were binding dataset to the datagrid. Now we are binding Data Table. When the xml is put in the dataset it is put in layers. So first layer/level of xml nesting is placed in first row , 2nd layer in second row and so on. Each Rss file 3rd tag is the item tag which contains the information. Hence our 3rd tag is at he index '2' since we start from '0'. You can try out different combinations with using different indexes and you will be returned with different types of tables.  
Look at the code below in which I am referring to a different table and get the different result.
// Assigns the data table to the datagrid
myDataGrid.DataSource = ds.Tables[4];
// Binds the datagrid
myDataGrid.DataBind();
Conclusion:
As you see embedding Rss feeds on your own page is easy as baking a pie. The good side of using Rss will be that your website will be updated automatically and you won't have to do anything. These days most of the websites are providing Rss feeds that you can use in your web pages.
Project files are also attached with this article. In the project I have added a textbox so you can enter the url of any Rss feed and when you press the button it will be extract the xml, which will be displayed on the web form in the datagrid.
Attachments:
   Project Files: RssFeeds.Zip

0 comments: