Search code examples
c#feedargotic

Check if a URL is a valid Feed


I'm using Argotic Syndication Framework for processing feeds.

But the problem is, if I pass a URL to Argotic, which is not a valid feed (for example, http://stackoverflow.com which is a html page, not feed), the program hangs (I mean, Argotic stays in an infinity loop)

So, How to check if a URL is pointing to a valid feed?


Solution

  • From .NET 3.5 you can do this below. It will throw an exception if it's not a valid feed.

    using System.Diagnostics;
    using System.ServiceModel.Syndication;
    using System.Xml;
    
    public bool TryParseFeed(string url)
    {
        try
        {
            SyndicationFeed feed = SyndicationFeed.Load(XmlReader.Create(url));
    
            foreach (SyndicationItem item in feed.Items)
            {
                Debug.Print(item.Title.Text);
            }
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
    

    Or you can try parsing the document by your own:

    string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<event>This is a Test</event>";
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(xml);
    

    Then try checking the root element. It should be the feed element and have "http://www.w3.org/2005/Atom" namespace:

    <feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:re="http://purl.org/atompub/rank/1.0">
    

    References: http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx http://dotnet.dzone.com/articles/systemservicemodelsyndication