Проверьте, является ли 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/ для его очистки. Как вариант, вы можете форкнуть проект.