Для одного проекта появилась задача — читать ленты 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); // вывод содержимого массива, каждой записи
}
А далее уже можно использовать полученные записи по своему усмотрению.