Парсинг RSS-лент и других XML-файлов на PHP
Зачастую нам приходится работать с большими объемами данных, такими как новости, товары и другая немаловажная информация.
В некоторых случаях лучше всего часть работы отдать скриптам, например – парсинг и представление этих данных на вашем сайте.
Сегодня мы подробно рассмотрим, как осуществить парсинг RSS-ленты и по аналогии – XML-файлов типа прайсов и других.
Итак, предположим, что вы нашли сайт, который предоставляет RSS-ленту в таком формате:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Все для создания сайтов: бесплатные шаблоны, скрипты, хаки и многое другое.</title>
<link>https://www.pandoge.com</link>
<description>Ты вебмастер и любишь свое дело? Перед тобой библия для практикующих веб-разработчиков.</description>
<item>
<title>Новости блога</title>
<link>https://www.pandoge.com/novosti_bloga/</link>
<description>Новости сайта, анонсы и обзоры в одном разделе - чтобы вы всегда были в курсе событий на нашем блоге.</description>
</item>
<item>
<title>Модули и скрипты</title>
<link>https://www.pandoge.com/moduli-i-skripty/</link>
<description>Вы хотите создать функциональный и посещаемый ресурс без вложений? Достичь цели вам помогут авторские скрипты и модули – интегрируйте и получайте результат.</description>
</item>
</channel>
</rss>
Что мы здесь видим? Это блок информации о ленте и два материала, заключенных в теге «item».
Давайте теперь постараемся получить все необходимые нам данные.
Поскольку основная наша идея – это сформировать свою ленту новостей на основе полученных данных, для начала мы получим информацию о текущей ленте.
Во всем примере мы будем использовать «SimpleXML», помогающий без особого труда обрабатывать XML-файлы.
Тогда код для получения основной информации о ленте будет выглядеть следующим образом:
<?php
header("Content-Type: text/html; charset=utf-8");
$url = "rss.xml"; // Адрес до RSS-ленты
$rss = simplexml_load_file($url);
$name_channel = $rss->channel->title; // Имя ленты
$link_channel = $rss->channel->link; // Ссылка на источник
$description_channel = $rss->channel->description; // Описание ленты
echo $description_channel; // Выводим описание
?>
Здесь мы получаем ссылку на источник, заголовок ленты и ее описание, и на примере описания – выводим его на странице.
Обратите внимание, что название тегов может немного отличаться – это не играет никакой роли, в вашем же случае – вы все делаете по аналогии.
Так, с основной информацией разобрались, теперь самое интересное – парсинг материалов.
В отличие от основной информации, материалов может быть несколько, и для того, чтобы получить их все – мы будем использовать цикл «foreach».
И получение уже самих материалов на примере нашей RSS-ленты будет выглядеть следующим образом:
<?php
header("Content-Type: text/html; charset=utf-8");
$url = "rss.xml"; // Адрес до RSS-ленты
$rss = simplexml_load_file($url);
foreach ($rss->channel->item as $items) {
echo <<<HTML
<h1>{$items->title}</h1>
<p>{$items->description}</p>
<a href="{$items->link}">Подробнее</a>
HTML;
}
?>
На выходе вы получите примерно такую картину:
Если у вас это не произошло – пишите об этом в комментариях.
По такому принципу парсятся все XML-файлы, меняется лишь их структура. Если в вашем файле присутствуют параметры в тегах и вы не знаете, как их получить – рекомендуем почитать эту статью.