WPF RSS Reader

RSS stands for "Real Simple Syndication" and is used for publishing updates of frequently updated content. It is a concept that allows syndication of content between two places.

RSS is used in a significantly large amount of industries from banks to publishers, businesses to news, and many more. RSS files are XML based files that contain formatted plain text.The beauty of RSS is that it can be used for any type of content. Simple alerts , podcasts and videocasts are few examples. .

I was looking to build a light version myself and Windows Presentation Foundation (WPF) was the primary candidate for the technology.

Let's dive in.

There is a rich XmlDataProvider class and a lighter but effective SyndicationFeed for you to start with. There are many examples on XMLDataProvider on the web; hence, I wanted to try the SyndicationFeed to create a quick RSS reader. WPF lets you create one with ease within minutes.

The following items would be used in this sample.

The Webclient can be used to download the contents of a specified url. You can even utilize the asynchronous implementation of the downloadstring method provided by this class to avoid freezing your User interface components.

webClientInstance.DownloadStringAsync(new Uri(theURLString));

Once the webclient downloads the data, it returns it as a string. We can use a stringreader to read the result. The result is obtained from the DownloadStringAsync method call of the Webclient instance.

StringReader stringReaderInstance = new StringReader(e.Result);

SyndicationFeed is a .Net inbuilt syndication class that can be used to work with feeds. It has a set of helpful properties that help you read the feed object effectively. Description, Authors, Copyright, Items, Title are few helpful properties. The following code snippet shows you how to read a webclient's response to a syndication feed.

XmlReader reader                = XmlReader.Create(new StringReader(e.Result));
SyndicationFeed downloadFeed    = SyndicationFeed.Load(reader);

Every feed also provides some interesting stuff like Image of the RSS feed provider. This can also be retrieved using the syndication feed. The following code snippet shows you how to do that.

<Image x:Name="feedImage" Grid.Column="0" Stretch="Fill"></Image>
SyndicationFeed downloadFeed = SyndicationFeed.Load(reader);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(imageUrl, UriKind.RelativeOrAbsolute);
bi.EndInit();
feedImage.Source = bi;

The listbox is bound to the Summary, Title, and PublishDate objects of the Syndication Feed Item. Following is the markup of the listbox.

<ListBox Name="listBoxFeedItems" IsSynchronizedWithCurrentItem="True"
        ScrollViewer.CanContentScroll="True">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Expander ExpandDirection="Right">
                                <TextBlock Text="{Binding Path=Summary.Text}" 
                                    TextTrimming="WordEllipsis" />
                            </Expander>
                                    <TextBlock Text="{Binding Path=Title.Text}"
                                    ToolTip="{Binding Path=PublishDate.Date}"/>
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
</ListBox>

Incidentally the more feeds I tried with SyndicationFeed, the more I found a new kind of problem. All feeds do not follow the standard specifications. One such non-standard item is the DateTime fields in the feed item. So you may end up writing your own custom XML Reader that derives and enhances Xml Text Reader.

I found an interesting post at the Microsoft connect, which solves this issue and is the way to go.

I hope you enjoyed the write-up. Thanks for reading!

References:

XMLDataProvider

Syndication feed load fails to Parse datetime



About the Author

Srinath M S

I would love to leave a footprint in this flat world

Related Articles

Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Where the business performance of their mobile app portfolios are concerned, most companies are flying blind. While traditional application portfolios are held to all kinds of ROI measure, the investment plan for mobile apps -- increasingly the more crucial bet -- is made by guesswork and dart-throwing. This interactive e-book investigates how mobile is driving the need for app and portfolio measures unlike any we saw in the days of web. Good mobile analytics must deliver leading indicators of user experience …

  • Protecting business operations means shifting the priorities around availability from disaster recovery to business continuity. Enterprises are shifting their focus from recovery from a disaster to preventing the disaster in the first place. With this change in mindset, disaster recovery is no longer the first line of defense; the organizations with a smarter business continuity practice are less impacted when disasters strike. This SmartSelect will provide insight to help guide your enterprise toward better …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds