Задача
Необходимо получить RSS-рассылку и просмотреть ее содержание. Это позволит нам включить рассылку новостей с нескольких веб-сайтов в ваше приложение.
Решение
Используйте PEAR-класс XML_RSS. Приведем пример, который читает RSS-рассылку для списка почтовых адресов php.announce:
require 'XML/RSS.php';
$feed = 'http://news.php.net/group.php?group=php.announce&format=rss';
$rss =& new XML_RSS($feed);
$rss->parse();
print "<ul>\n";
foreach ($rss->getItems() as $item) {
print '<li>' . $item['title'] . "</li>\n";
}
print "</ul>\n";
Обсуждение
RSS, что означает RDF Site Summary, является простым в использовании форматом заголовков или синдикации статей, написанным на XML.1 Многие новостные веб-сайты, такие как Slashdot и Meerkat издательства O’Reilly, предоставляют RSS-рассылки, которые обновляются при каждой публикации нового материала. Популярные сетевые издания также включают RSS, а RSS-рассылка в вашем собственном онлайн-дневнике является уже стандартной функциональностью.
Веб-сайт PHP также публикует RSS-рассылки для большинства серверов почтовых рассылок PHP.
Получать и анализировать RSS-рассылку просто:
$feed = 'http://news.php.net/group.php?group=php.announce&format=rss';
$rss =& new XML_RSS($feed);
$rss->parse();
Этот пример присваивает переменной $rss новый объект XML_RSS и передает значение переменной feed в RSS-рассылку новостей php.announce.
Затем рассылка анализируется с помощью функции XML_RSS::parse() и сохраняется в переменной $rss.Впоследствии к элементам RSS обращаются как к ассоциативному массиву, полученному с помощью функции XML_RSS:getItems():
print "<ul>\n";
foreach ($rss->getItems() as $item) {
print '<li>' . $item['title'] . "</li>\n";
}
print "</ul>\n";
Этот цикл foreach создает неупорядоченный список элементов ссылок на статьи так, как показано на рис. 12.1. Помимо обязательных полей title и link, элемент может иметь и необязательное поле description, в котором содержится краткое описание статьи.
Каждый канал также содержит вход с общей информацией о рассылке. Для извлечения данных используем функцию XML_RSS::getChannelInfo():
$feed = 'http://news.php.net/group.php?group=php.announce&format=rss';
$rss =& new XML_RSS($feed);
$rss->parse();
print "<ul>\n";
foreach ($rss->getChannelInfo() as $key => $value) {
print "<li>$key: $value</li>\n";
}
print "</ul>\n";