Click here to Skip to main content
12,451,243 members (54,282 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as

Stats

18.4K views
6 bookmarked
Posted

Reading RSS items on Windows Phone 7

, 3 Feb 2011 Ms-PL
Rate this:
Please Sign up or sign in to vote.
Following is a utility class I wrote to help me read RSS items asynchronously on a Silverlight for Windows Phone 7 application. I will present how it was written and then how to use it. At the end of this post you can find a sample application that contains all the code.

Following is a utility class I wrote to help me read RSS items asynchronously on a Silverlight for Windows Phone 7 application.

I will present how it was written and then how to use it. At the end of this post you can find a sample application that contains all the code.

How to read RSS?

Add Helper Assembly

The first thing we need to do is to add a reference to the assembly, System.ServiceModel.Syndication.dll which contains classes that can parse RSS feeds.

This assembly is part of the Silverlight 3 SDK. It isn’t part of the Windows Phone 7 SDK, but there is no problem in using it there. You can find the file under: %ProgramFiles%\Microsoft SDKs\Silverlight\v3.0\Libraries\Client\System.ServiceModel.Syndication.dll

Add Reference dialog

You will get the following warning, just ignore it, it works.

Adding a reference to a Silverlight assembly may lead to unexpected application behavior. Do you want to continue?

Define RssItem

Before we get to business, let’s define a model class that will encapsulate the data of a single RSS item.

Our RssItem class will hold the following properties: Title, Summary, PublishedDate and Url. In addition I provide a PlainSummary property that will hold a plain text version of the RSS item. Usually the summary has HTML tags that we just want to ignore, thus PlainSummary for the rescue.

/// <span class="code-SummaryComment"><summary>
</span>

Implement The RSS service

The RSS service will get the RSS feed URL as a parameter. In addition, since we want our class to work asynchronously we will accept as parameters a few more delegates:

  • Action<IEnumerable<RssItem>> onGetRssItemsCompleted, which will be called when the RSS items are ready to be processed.
  • Action<Exception> onError, which will be called if there is an error while getting the RSS items.
  • Action onFinally, which will be called always, whether there was an exception or not. Think of it as the finally section a common try-catch block.

So the method signature will be:

public static void GetRssItems(string rssFeed, 
    Action<IEnumerable<RssItem>> onGetRssItemsCompleted = null, 
    Action<Exception> onError = null, Action onFinally = null)

To get the feed XML we will use the WebClient class:

WebClient webClient = new WebClient();

// register on download complete event
webClient.OpenReadCompleted += delegate(object sender, OpenReadCompletedEventArgs e)
{
    ...
};

webClient.OpenReadAsync(new Uri(rssFeed));

The actual RSS parsing is done using the SyndicationFeed class from our helper assembly:

// convert rss result to model
List<RssItem> rssItems = new List<RssItem>();
Stream stream = e.Result;
XmlReader response = XmlReader.Create(stream);
SyndicationFeed feeds = SyndicationFeed.Load(response);
foreach (SyndicationItem f in feeds.Items)
{
    RssItem rssItem = new RssItem(f.Title.Text, f.Summary.Text, f.PublishDate.ToString(), 
        f.Links[0].Uri.AbsoluteUri);
    rssItems.Add(rssItem);
}

The rest of the code is for handling the different delegates: onCompleted, onError and onFinally. I bring here the method in its full:

/// <span class="code-SummaryComment"><summary>
</span>

Using the RSS Service

Using the class is very easy, just provide the URL as the first parameter and a delegate for getting the “completed” notification.

private void Button_Click(object sender, RoutedEventArgs e)
{
    RssService.GetRssItems(
        WindowsPhoneBlogPosts,
        (items) => { listbox.ItemsSource = items; },
        (exception) => { MessageBox.Show(exception.Message); },
        null
        );
}

There is a sample application which can be downloaded here.

image

Note: this code was first published as part of the “Using Pivot and Panorama Controls” lab found in the Windows Phone Training Kit for Developers, which I wrote for Microsoft.

That’s it for now, Arik Poznanski.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

Share

About the Author

Arik Poznanski
Software Developer (Senior) Verint
Israel Israel
Arik Poznanski is a senior software developer at Verint. He completed two B.Sc. degrees in Mathematics & Computer Science, summa cum laude, from the Technion in Israel.

Arik has extensive knowledge and experience in many Microsoft technologies, including .NET with C#, WPF, Silverlight, WinForms, Interop, COM/ATL programming, C++ Win32 programming and reverse engineering (assembly, IL).

You may also be interested in...

Pro
Pro

Comments and Discussions

 
QuestionHow to open feed item link in the phone browser Pin
Member 379033925-Dec-12 23:17
memberMember 379033925-Dec-12 23:17 
QuestionDateTime problem Pin
mikeluo200516-Dec-11 9:09
membermikeluo200516-Dec-11 9:09 
GeneralUrl Pin
CristiMirt20-Mar-11 23:39
memberCristiMirt20-Mar-11 23:39 
GeneralRe: Url Pin
Arik Poznanski20-Mar-11 23:55
mvpArik Poznanski20-Mar-11 23:55 
GeneralRe: Url Pin
Ranjan.D14-Dec-12 6:52
memberRanjan.D14-Dec-12 6:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160826.1 | Last Updated 3 Feb 2011
Article Copyright 2011 by Arik Poznanski
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid