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

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

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

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

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


person J. LaRosee    schedule 16.01.2009    source источник


Ответы (4)


Это просто. Вы можете сделать это с помощью SyndicationFeed.. Он поддерживает Atom 1.0 и версии RSS 2.0.

try 
{
    SyndicationFeed fetchedItems = SyndicationFeed.Load(XmlReader.Create(feedUrl));
    // Validation successful.
} 
catch { // Validation failed. };
person Lukas Šalkauskas    schedule 21.05.2009
comment
Звучит хорошо; это портировано на PHP? (имея аналогичную проблему, на машине невозможно .net) - person Piskvor left the building; 21.05.2009
comment
Я так не думаю :) Вы можете попробовать проверить это через какой-нибудь веб-сервис, такой как feedkiller.com или аналогичный, чтобы сделать какой-то веб-запрос или что-то в этом роде. - person Lukas Šalkauskas; 21.05.2009

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

person Johannes Weiss    schedule 16.01.2009

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

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

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

person Grey Panther    schedule 04.02.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-канала упрощает и упрощает работу.

person davethegr8    schedule 30.12.2009