Создание RSS ленты с помощью Zend_Feed
Опубликовано: 28.10.2008
|
Сегодня решил прикрутить к zendframework.ru rss ленту. Спешу поделиться рецептом.
Но сначала пару слов о RSS формате.
Простыми словами это специальный формат для удобного чтения новостей, статей или другой информации. Причем основной изюминкой RSS является возможность читать эти самые новости с сотни ресурсов, и при этом не посещать сами ресурсы. Чтение происходит в одном месте с помощью удобной специальной программы.
RSS формат имеет несколько версий, мы будем рассматривать версию 2.0 Итак, простая RSS лента или канал может иметь следующий вид:
<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<title>Русскоязычное Zend Framework сообщество</title>
<link></link>
<description> zendframework.ru - Русскоязычное Zend Framework сообщество </description>
<item>
<title>У нас появился фид</title>
<link>/site-news/we-have-feed</link>
<description>У русскоязычного сообщества zendframework.ru появился свой фид.</description>
</item>
</channel>
</rss>
Из примера видно что лента (по другому фид, от англ. feed) состоит из двух частей. Описания самой ленты, и элементов item
Описание ленты содержит обязательные параметры title – название ленты, link – URL сайта на котором расположена лента и description – описание ленты. Каждый элемент item должен содержать или параметр title или параметр description как минимум. Как и в описании канала, так и в описании элементов может быть еще масса не обязательных параметров.
Когда с RSS стало ясно перейдем к реализации. В Zend Framework для таких целей есть специальный компонент Zend_Feed. Но после прочтения мануала может сложиться впечатление, что там предусмотрены лишь средства по обработке RSS, а генерацию обошли стороной.
На самом деле это не так. Под генерацией подразумевается импорт ленты
Простое и изящное решение было подсмотрено в блоге у William Estep. Мы воспользуемся возможностью импорта RSS ленты из массива.
Далее код с комментариями:
public function feedAction()
{
// Получение последних 10ти статей
$articlesTable = new Table_Articles();
$articlesLast10 = $articlesTable->getArticles(null, null, true, 10);
// Название ленты
$title = 'zendframework.ru';
// Ссылка на ленту
$urlPrefix = '';
$link = $urlPrefix;
// Описание
$description = 'zendframework.ru - русскоязычное Zend Framework сообщество';
// Кодировка
$charset = 'UTF-8';
// Массив для ленты
$feedArray = array(
'title' => $title,
'link' => $link,
'description' => $description,
'charset' => $charset,
'entries' => array()
);
// Добавляем статьи в массив
foreach ($articlesLast10 as $item) {
// Дату создания статьи необходимо привести к формату timestamp
$date = new Zend_Date($item['date'], 'YYYY-MM-dd HH:mm:ss');
$itemTimestamp = $date->getTimestamp();
$feedArray['entries'][] = array(
'title' => $item['title'],
'link' => $urlPrefix . '/' . $item['rubric_name'] . '/' . $item['name'],
'description' => $item['content'],
'lastUpdate' => $itemTimestamp
);
}
// Отключаем Zend_View и Zend_Layout, ведь мы создаем xml файл
$this->_helper->viewRenderer->setNoRender(true);
Zend_Layout::getMvcInstance()->disableLayout();
// Импортируем массив в ленту
$feed = Zend_Feed::importArray($feedArray, 'rss');
// Отправляем нужные заголовки браузеры и получаем нашу ленту
$feed->send();
}
Все получилось очень просто. Примерно такой же код использован для генерации rss ленты на этом сайте. Естественно здесь для примера он упрощен. В реальном коде текстовые надписи вынесены в текстовые файлы. URL сайта и кодировка берется из конфига, а ссылки на статьи генерируются с помощью view помощника Zend_View_Helper_Url.
Более подробную информацию по RSS 2.0 можно найти
Updates:
16.11.08 С подачи atukai атрибут pubDate был заменен на lastUpdate. Атрибут pubDate отвечает за дату публикации RSS, более того, согласно мануалу, он должен называться published. Нам же нужна непосредственная дата создания или публикации статьи, для этого и существует атрибут lastUpdate. Кроме того дату нужно подавать в формате timestamp.
- Спрашивать почему у вас не работает код, для этого есть тема форума закрепленная за статьей.
- Спрашивать как реализовать ту или иную функциональность, для этого необходимо создать свою тему на форуме.
Комментарии для того чтобы: высказать свое аргументированное мнение о статье, указать какие участки вызывают непонимание, что нужно исправить/улучшить, просто сказать спасибо.
Комментарии имеют древовидную структуру.
Если вы хотите ответить на определенный комментарий - нажмите на ссылку "Ответить" возле этого комментария.