Daniel Fisher (lennybacon.com)

SOA, DATA & THE WEB

Playing with the Windows RSS Platform

Microsoft introduces with Vista/IE7/Office2007 the Microsoft RSS Platform -

For some reasons my IE is not able to export the feeds that I read in IE7 and Outlook 2007 to OPML.

I had a look at the API and wrote this small console applictaion to export my feed list to the OPML format.

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Xml;
 
using Microsoft.Feeds.Interop;
using System.Collections.Generic;
 
namespace RssWindowsPlatformOpmlExporter
{
    class Program
    {
        static void Main(string[] args)
        {
            string pathToExport = "D:\\temp\\feeds.opml";
            if (args.Length > 0)
            {
                pathToExport = args[0];
            }
 
            FeedsManager mgr = new FeedsManager();
            Queue<IFeedFolder> queue = new Queue<IFeedFolder>();
            queue.Enqueue(mgr.RootFolder as IFeedFolder);
 
            while (queue.Count > 0)
            {
                IFeedFolder currentFolder = queue.Dequeue();
                IFeedsEnum subFolders = (IFeedsEnum)currentFolder.Subfolders;
 
                for (int i = 0; i < subFolders.Count; i++)
                {
                    queue.Enqueue((IFeedFolder)subFolders.Item(i));
                }
 
                using (XmlWriter opml = XmlWriter.Create(pathToExport))
                {
                    opml.WriteStartDocument();
                    opml.WriteStartElement("opml");
                    opml.WriteAttributeString("version", "1.0");
 
                    IFeedsEnum feeds = (IFeedsEnum)currentFolder.Feeds;
                    for (int i = 0; i < feeds.Count; i++)
                    {
                        IFeed feed = (IFeed)feeds.Item(i);
 
                        try
                        {
                            if (!string.IsNullOrEmpty(feed.Title) 
                                && !string.IsNullOrEmpty(feed.DownloadUrl))
                            {
                                opml.WriteStartElement("outline");
                                opml.WriteAttributeString("title", feed.Title);
                                opml.WriteAttributeString("xmlUrl", feed.url);
                                opml.WriteEndElement();
                            }
                        }
                        catch (COMException e)
                        {
                            Console.WriteLine(
                                "Error getting feed: {0}", 
                                e.Message);
                        }
                    }
 
                    opml.WriteEndElement();
                    opml.WriteEndDocument();
                }
            }
        }
    }
}

Comments

Write a comment