6

フィードの処理にArgoticSyndicationFrameworkを使用しています。

しかし、問題は、有効なフィードではないURLをArgoticに渡すと(たとえば、フィードではなくhttp://stackoverflow.comhtmlページである)、プログラムがハングすることです(つまり、Argoticは無限ループにとどまります)

では、URLが有効なフィードを指しているかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

7

.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

于 2012-08-16T22:46:28.167 に答える
2

Feed Validation Serviceを使用できます。SOAP APIがあります。

于 2012-08-16T23:01:50.100 に答える
1

コンテンツの種類を確認できます。でなければなりません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 があります。それを扱うには、この質問の答えを読むことができます。

于 2012-08-16T22:49:03.780 に答える