XML парсер (parser) RSS-лент

XML парсер (parser) RSS-лент

Как говорится: «xml это такая штука, от которой всем очень хорошо ...» — но от этого не становится легче. Есть такой стандарт XML документов, как RSS. Данная заметка посвящена тому, как можно парсить RSS-фиды средствами PHP.
Рассматриваемый XML парсер — SimpleXML. Несмотря на то, что он очень прост, стоит помнить, что данное расширение присутствует только в PHP 5, хотя есть библиотеки и для более ранних версий, но об этом уже позаботьтесь сами. Да и валидность многих RSS-лент желает лучшего. Остается лишь придумывать «костыли» и использовать то, что имеем.

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

Итак, начнем с того, что введем переменную, значением которой будет RSS-фид, что нас интересует. Например:

$rss = "http://k.img.com.ua/rss/ru/news.xml";


Теперь нам необходимо загрузить и отпарсить эти данные. Здесь я приведу два способа. Первый позволяет считать RSS-фид обычным образом и используя SimpleXML как парсинг строки данных. Например:

$xmlstr = @file_get_contents($rss);
if($xmlstr===false)die('Error connect to RSS: '.$rss);
$xml = new SimpleXMLElement($xmlstr);
if($xml===false)die('Error parse RSS: '.$rss);


Как вы видите мы:
— скачали наш RSS-фид в строку, ставшей значением переменной $xmlstr;
— проверили, удалось-ли загрузить RSS-ленту;
— отпарсили данные RSS-фида и присвоили результат переменной $xml;
— проверили, удалось-ли отпарсить данные RSS-ленты.

Всю эту процедуру можно упростить следующим образом:

$xml = @simplexml_load_file( $rss);
if($xml===false)die('Error parse RSS: '.$rss);


Сравнив два примера, вы легко найдете отличия и поймете суть. Так что не будем останавливаться на достигнутом, и пойдем дальше. Теперь мы имеем данные RSS-ленты в удобном для обработки формате. Здесь и объектно-ориентированный подход и массивы данных. Чтобы стало понятнее, приведу пример вывода данных RSS-ленты:

foreach($xml->xpath('//item') as $item){
echo ''.$item->title.'('.$item->pubDate.')';
echo '
'.$item->description.'
';
}


Как Вы видите, здесь я применил Xpath запрос для выборки массива записей RSS-фида. Обратите внимание, что значением является «ребенок» item, отец которого channel (см. описание формата RSS). Именно поэтому имеем два слеша впереди. Чтобы было нагляднее, приведу пример без использования Xpath:

foreach($xml->channel->item as $item) {


Стоит также отметить, что мы получаем объект $item, параметры которого и выводим на экран.

На этом вроде и все. Как видите SimpleXML действительно прост.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.