Проверьте, является ли URL действительным фидом

Я использую Argotic Syndication Framework для обработки каналов.

Но проблема в том, что если я передам URL-адрес Argotic, который не является допустимым фидом (например, http://stackru.com это html-страница, а не feed), программа зависает (я имею в виду, Argotic остается в бесконечном цикле)

Итак, как проверить, если URL-адрес указывает на действительный канал?

3 ответа

Решение

С.NET 3.5 вы можете сделать это ниже. Будет сгенерировано исключение, если это не допустимый фид.

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;
    }
}

Или вы можете попробовать разобрать документ самостоятельно:

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

Затем попробуйте проверить корневой элемент. Он должен быть элементом feed и иметь пространство имен " http://www.w3.org/2005/Atom":

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

Ссылки: http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx http://dotnet.dzone.com/articles/systemservicemodelsyndication

Вы можете использовать Службу проверки каналов. У этого есть SOAP API.

Вы можете проверить тип контента. Должно быть text/xml, Посмотрите этот вопрос, чтобы найти тип контента.

Вы можете использовать этот код:

var request = HttpWebRequest.Create("http://www.google.com") as HttpWebRequest;
if (request != null)
{
    var response = request.GetResponse() as HttpWebResponse;

    string contentType = "";

    if (response != null)
        contentType = response.ContentType;
}

благодаря ответу на вопрос

Обновить

Чтобы проверить, является ли это адресом канала, вы можете воспользоваться услугой W3C Feed Validation.

Update2

как сказал BurundukXP, у него есть SOAP API. для работы с ним вы можете прочитать ответ на этот вопрос.

Если вы хотите просто преобразовать его в действующий RSS/ATOM, вы можете использовать http://feedcleaner.nick.pro/ для его очистки. Как вариант, вы можете форкнуть проект.

Другие вопросы по тегам