Узнать разрешение вашего экрана и IP адрес   •   Online-инструменты
923 просм
2 комм
Поделиться:

Парсинг 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;

	}
?>

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

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

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

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

2
комментария
Григорий Мельников
30.07 в 10:55
Привет, крутая статья! А можно ли это совместить на Wordpres?
Как подключить? Или какие есть варианты для Wordpres?
  • 1
Григорий Мельников, Да, конечно можно.

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

Если что-то посерьезнее - то отдельный модуль.
  • 0
Оставить комментарий:
Нажимая кнопку «Отправить» вы даете согласие на обработку своих персональных данных.
Ваше Имя
Ваш E-mail
Текст комментария