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