Проверка RSS-канала - PullRequest
       36

Проверка RSS-канала

1 голос
/ 16 января 2009

Я работаю над приложением, которое позволяет пользователям добавлять свои собственные RSS-каналы в своего рода простое приложение для чтения.

В настоящее время я использую xml_domit_rss в качестве синтаксического анализатора, но я не уверен, действительно ли он проверяет URL перед анализом.

Из того, что я могу собрать в Интернете, похоже, что валидация отделена от анализа, либо с помощью службы https://www.feedvalidator.org, либо с помощью другого метода, например parse_url().

Кто-нибудь может понять, как xml_domit_rss проверяет, или метод, с помощью которого я могу проверить перед отправкой URL парсеру?

Ответы [ 5 ]

1 голос
/ 16 января 2009

Вы можете проверить RSS с помощью схемы RelaxNG. Схемы для всех различных форматов каналов должны быть доступны онлайн ...

0 голосов
/ 31 мая 2011

попробуйте этот код

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

?>
0 голосов
/ 30 декабря 2009

Это мое быстрое и грязное решение, которое сработало для меня при подобных обстоятельствах

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 и такими объектами, как • или —

xml_parse возвращает 1 в случае успеха, так что вы можете проверить его с помощью прямого оператора if. Затем использование SimpleXMLElement для обхода RSS-канала делает все просто и красиво.

0 голосов
/ 21 мая 2009

Это просто, вы можете сделать это, используя SyndicationFeed . Он поддерживает версии Atom 1.0 и RSS 2.0 .

try 
{
    SyndicationFeed fetchedItems = SyndicationFeed.Load(XmlReader.Create(feedUrl));
    // Validation successful.
} 
catch { // Validation failed. };
0 голосов
/ 04 февраля 2009

Проверка в контексте файлов XML (и, следовательно, каналов RSS / Atom, которые используют XML для кодирования значений) означает использование схемы документа, которая описывает ожидаемую структуру файла XML (какие элементы могут иметь какие дочерние элементы, какие атрибуты могут присутствовать и т. д.).

Теперь некоторым синтаксическим анализаторам XML требуются схема и обработка (это технический термин :-) - отказаться от анализа) для файлов XML, не соответствующих схеме. Теперь, увидев, как вы анализируете произвольный RSS, возможно, лучше всего пропустить проверку и приложить максимум усилий для анализа RSS-канала. Кроме того, вы можете показать результаты анализа пользователю (аналогично тому, как это делает Google Reader, когда вы добавляете новый канал), и позволить ей судить, выглядит ли результат хорошо.

К сожалению синтаксический анализатор XML , используемый этим кодом, к сожалению, мертв, и я не могу найти какой-либо детали, насколько он строг или слаб в его разборе ...

...