フィードの処理にArgoticSyndicationFrameworkを使用しています。
しかし、問題は、有効なフィードではないURLをArgoticに渡すと(たとえば、フィードではなくhttp://stackoverflow.com
htmlページである)、プログラムがハングすることです(つまり、Argoticは無限ループにとどまります)
では、URLが有効なフィードを指しているかどうかを確認するにはどうすればよいですか?
.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);
次に、ルート要素を確認してみてください。これはフィード要素であり、" 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
Feed Validation Serviceを使用できます。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 フィード検証サービスを使用できます。
Update2
BurundukXP が言うように、SOAP API があります。それを扱うには、この質問の答えを読むことができます。