Парсинг RSS-файла


Начиная с пятой версии в PHP появился класс SimpleXMLElement, с помощью которого можно легко разобрать любой XML документ, а следовательно HTML и RSS. Данный класс предоставляет возможность доступа к тегам и атрибутам документа как к полям объекта.
Для примера возьмем такой RSS-файл:
 
<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">   
<channel>
<title>Информационное агентство УНИАН</title>
<item>
    <title>Киев может войти в список самых дорогих городов</title>
    <link>http://unian.net/rus/news/news-232406.html</link>
    <category>Политика</category>
    <description>Англичане пока не обращают взор </description>
    <pubDate>Thu, 24 Jan 2008 11:06:00 +0200</pubDate>
</item>
<item>
    <title>Что скажут Ющенко акулы бизнеса? - Дурных нема?</title>
    <link>http://unian.net/rus/news/news-232400.html</link>
    <category>Политика</category>
    <description>Следуя логике премьера, было бы правильным разрешить населению не платить за «заведомо некачественные» товары и услуги. А работодателям – за «заведомо некачественную» работу… </description>
    <pubDate>Thu, 24 Jan 2008 10:38:00 +0200</pubDate>
</item>
</channel>
</rss>

Нас будет интересовать все что находится внутри тегов <item>. Создадим объект класса SimpleXMLElement и загрузим в него файл "news_rus.rss":
$rss_file = file_Get_contents("news_rus.rss");
$rss_xml = new SimpleXMLElement($rss_file);
 
После этого все содержимое тегов <item> будет находиться в массиве $rss_xml->channel->item. Таким образом можно добраться до содержимого любого тега в документе.
Следующий фрагмент кода создаст массив $rss, который будет содержать все данные массива $rss_xml->channel->item:
 
for($i = 0; $i < count($rss_xml->channel->item); $i++)
{
    $rss[] = array(
        "title" => $rss_xml->channel->item[$i]->title,
        "link" => $rss_xml->channel->item[$i]->link,
        "category" => $rss_xml->channel->item[$i]->category,
        "description" => $rss_xml->channel->item[$i]->description,
        "date" => $rss_xml->channel->item[$i]->pubDate
    );
}
 
В некоторых случаях возможна проблема с кодировками для русских букв, для решения этой проблемы воспользуйтесь функцией iconv().
 
Подробная документация на русском языке по функциям PHP на сайте http://ua2.php.net/manual/ru/index.php


Добавить комментарий

Логин:
Пароль:
Проверочное число: