Чтение rss лент с помощью php

Для одного проекта появилась задача — читать ленты rss, для последующего постинга статей из этих лент. Погуглил, посмотрел свои старые работы — нашел много интересных решений, в том числе и с помощью функии simplexml_load_file , но все не подходило по ряду причин. Тот же simplexml_load_file не все rss ленты читает, проблема у него с кодировкой windows-1251, на некоторых сайтах. Потому и пришлось искать другие варианты.

В итоге была найдена библиотека, состоящая из нескольких функций для чтения и разбора rss лент. Всю библиотеку мне не нужно было использовать, потому я оставил только 2 необходимые функции, немного подправил под себя и все работает отлично!

<?php
function RSS_Tags($item)
{
		$y = array();
		$tnl = $item->getElementsByTagName("title");
		$tnl = $tnl->item(0);
		$title = $tnl->firstChild->textContent;

		$tnl = $item->getElementsByTagName("link");
		$tnl = $tnl->item(0);
		$link = $tnl->firstChild->textContent;

		$tnl = $item->getElementsByTagName("pubDate");
		$tnl = $tnl->item(0);
		$date = $tnl->firstChild->textContent;		

		$tnl = $item->getElementsByTagName("description");
		$tnl = $tnl->item(0);
		$description = $tnl->firstChild->textContent;

		$y["title"] = $title;
		$y["link"] = $link;
		$y["date"] = $date;		
		$y["description"] = $description;

		return $y;
}

function RSS_Read($url)
{
	$doc  = new DOMDocument();
	$doc->load($url);

	$items = $doc->getElementsByTagName("item");    

	$RSS_Content = array();

	foreach($items as $item)
	{
		$y = RSS_Tags($item);	// get description of article, type 1
		array_push($RSS_Content, $y);
	} 
    return $RSS_Content;	
}
?>



Как видно по коду, функция RSS_Tags возвращает нам заголовок, ссылку, дату публикации и краткое описание конкретной записи, а функция RSS_Read проходит по ленте в цикле, выбирает все записи, вызывает функцию RSS_Tags для каждой записи, записывает ответ в массив $RSS_Content и отдает его нам! Все просто 🙂 А ниже пример использования этой библиотеки:

<?php

$feeds = RSS_Read("http://news.mail.ru/rss/");

foreach ($feeds as $feed){
    print_r($feed); // вывод содержимого массива, каждой записи
}

А далее уже можно использовать полученные записи по своему усмотрению.

This entry was posted in Php and tagged , , . Bookmark the permalink.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*