Артём Мáлков

Парсинг RSS-лент и других XML-файлов на PHP

3 янв2 комм

Зачастую нам приходится работать с большими объемами данных, такими как новости, товары и другая немаловажная информация.

В некоторых случаях лучше всего часть работы отдать скриптам, например – парсинг и представление этих данных на вашем сайте.

Сегодня мы подробно рассмотрим, как осуществить парсинг 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;

	}

?>

На выходе вы получите примерно такую картину:

Парсинг RSS-лент и других XML-файлов на PHP

Если у вас это не произошло – пишите об этом в комментариях.

По такому принципу парсятся все XML-файлы, меняется лишь их структура. Если в вашем файле присутствуют параметры в тегах и вы не знаете, как их получить – рекомендуем почитать эту статью.

Рекомендуем к просмотру
Замена ID категории в товарах YML-прайса ее названием + добавление цепочки родителей
Модули и скрипты
Получаем курсы валют с сайта Национального банка Казахстана на PHP
Модули и скрипты
Как запретить прямой доступ к PHP-файлу?
Статьи и советы
2
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    1067
      •  Команда Pandoge
    30 июл в 17:29

    Григорий Мельников, Да, конечно можно.

    Если это не большой информер - то через свою функцию в файле functions.php + кэширование данных.

    Если что-то посерьезнее - то отдельный модуль.

    • 2
    766
      •  Гости
    30 июл в 10:55

    Привет, крутая статья! А можно ли это совместить на Wordpres?

    Как подключить? Или какие есть варианты для Wordpres?

Подняться наверх
«Pandoge» - помощник вебмастера