1

私は、ユーザーが独自の RSS フィードをある種の単純なリーダーに追加できるようにするアプリケーションに取り組んでいます。

現在、xml_domit_rssパーサーとして使用していますが、解析する前に実際に URL を検証しているかどうかはわかりません。

私がオンラインで収集できるものからすると、サービスhttps://www.feedvalidator.orgを使用するか、parse_url().

xml_domit_rssURLをパーサーに送信する前に、検証方法、または検証できる方法について洞察を持っている人はいますか?

4

5 に答える 5

1

RelaxNG スキーマを使用して RSS を検証できます。さまざまなフィード形式すべてのスキーマがオンラインで入手できるはずです...

于 2009-01-16T17:51:12.243 に答える
0

これは、同様の状況下で私のために働いた私の迅速で汚い解決策です

foreach($sources as $source) {
    if(!$source["url"]) {
        continue;
    }

    $rss = curl_request($source["url"]);
    $rss = str_replace('&', '&', $rss);

    $parser = xml_parser_create();
    if(xml_parse($parser, $rss)) {
        $xmle = new SimpleXMLElement($rss);
    }
    else {
        $xmle = null;
        continue;
    }

    //other stuff here
}

アンパサンドを必ず置き換えてください&。そうしないと、SimpleXMLElementパーサーや•またはなどのエンティティで問題が発生する可能性があるためです。—

成功すると1xml_parseが返されるので、簡単なifステートメントで確認できます。次に、SimpleXMLElementを使用してRSSフィードをトラバースすると、作業が簡単になります。

于 2009-12-30T04:12:56.337 に答える
0

このコードを試してください

function validateFeed( $sFeedURL )
{

    $sValidator = 'http://feedvalidator.org/check.cgi?url=';

    if( $sValidationResponse = @file_get_contents($sValidator . urlencode($sFeedURL)) )
    {
        if( stristr( $sValidationResponse , 'This is a valid RSS feed' ) !== false )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

?>
于 2011-05-31T09:56:46.233 に答える
0

XML ファイル (したがって、XML を使用して値をエンコードする RSS/Atom フィード) のコンテキストでの検証とは、XML ファイルの予想される構造 (どの要素がどの子要素を持つことができるか、どのような属性を持たせることができるか) を記述するドキュメント スキーマを使用することを意味します。現在など)。

現在、一部の XML パーサーはスキーマを必要とし、スキーマに準拠していない XML ファイルに対して失敗します (これは専門用語です :-) - 解析を拒否します)。任意の RSS をどのように解析しているかを確認すると、検証をスキップして、RSS フィードの解析に最善を尽くすのがおそらく最善です。また、解析結果をユーザーに表示して (新しいフィードを追加するときに Google リーダーが行う方法と同様)、結果が適切かどうかを彼女に判断させることもできます。

残念ながら、このコードで使用されている XML パーサーは残念ながら死んでいるようで、解析がどれほど厳密か緩いかについては詳細を見つけることができません...

于 2009-02-04T07:54:20.107 に答える
0

それは簡単です。 SyndicationFeedを使用してそれを行うことができます。Atom 1.0およびRSS 2.0バージョンをサポートしています。

try 
{
    SyndicationFeed fetchedItems = SyndicationFeed.Load(XmlReader.Create(feedUrl));
    // Validation successful.
} 
catch { // Validation failed. };
于 2009-05-21T08:17:31.727 に答える