В этой заметке описывается PHP-скрипт для генерации RSS-ленты, который Иван Скляров написал для своего сайта.
Немного теории. RSS лента представляет собой обычный XML-файл, вот пример:
<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>SKLYAROFF</title>
<link>http://www.sklyaroff.ru/</link>
<description>MY BLOG</description>
<copyright>Copyright (c) Sklyaroff Ivan</copyright>
<item>
<title>С 18 Ноября "X-Puzzle" в "][акере"</title>
<link>http://www.sklyaroff.ru/comm.php?mess=111</link>
<pubDate>Sat, 22 Nov 2008 06:20:20 +0300</pubDate>
<description>Покупаем ноябрьский номер ][акера, решаем головоломки в моей рубрике "X-Puzzle"…</description>
</item>
<item>
<title>Простенькая задачка для начинающих и заканчивающих программистов</title>
<link>http://www.sklyaroff.ru/comm.php?mess=110</link>
<pubDate>Fri, 21 Nov 2008 05:47:02 +0300</pubDate>
<description>Понадобились мне тут числа (много чисел) делящиеся нацело на 9, делящиеся нацело на 13, делящиеся нацело на 125…
</description>
</item>
<item>
<title>Валидный сайт</title>
<link>http://www.sklyaroff.ru/comm.php?mess=106</link>
<pubDate>Mon, 17 Nov 2008 20:06:55 +0300</pubDate>
<description>Ха, мой сайт без ошибок прошел тесты на всех основных…
</description>
</item>
</channel>
</rss>
Согласно спецификации RSS 2.0 RSS-лента должна содержать всего три обязательных элемента:
title
link
description
Все остальные элементы RSS, коих около двух десятков, являются дополнительными.
В самом начале RSS-ленты перечисленные три элемента используются для описания канала целиком:
title - имя RSS канала. Оно может совпадать с названием сайта.
link - URL сайта для которого создается лента
description - краткое описание канала
Затем эти элементы описывают каждый item (пост блога, новость, статью, отдельный комментарий и пр.):
title - заголовок item’а.
link - URL на item
description - здесь обычно выводится содержимое сообщения
Хорошо также в каждый item вставлять дополнительный элемент <pubDate>, который предназначен для указания даты публикации. Сообщения и новости без дат публикации будут неудобны читателям RSS-ленты.
Здесь я хочу сказать о важной особенности связанной с датами в RSS-лентах. Дело в том, что согласно спецификации все даты в RSS-ленте должны указываться согласно стандарту RFC-822, т. е. в таком формате:
Mon, 17 Nov 2008 20:06:55 +0300
Если в базе данных у вас даты указаны в другом формате, то перед выводом их необходимом преобразовать в формат RFC-822. В моем случае даты и время хранятся в раздельных полях базы данных (date и time), поэтому я их преобразовываю отдельно, а потом "склеиваю вместе". Преобразование осуществляется с помощью стандартной функции strftime, при этом преобразуемые данные должны быть переданы этой функции не в текстовом виде, а в виде "метки времени Unix" для чего задействуется функция strtotime.
Содержимое элемента description каждого item’а выводится с помощью XML-секции CDATA. Это позволяет выводить сообщения в RSS-ленте без ошибок, т. к. HTML-теги указанные в секции CDATA не интерпретируются как теги XML.
Ниже показан полный исходный код скрипта на PHP, который создает RSS-ленту:
<?php
// Устанавливаем тип содержимого - XML
("Content-type: text/xml; charset=windows-1251");
echo ‘<?xml version="1.0" encoding="windows-1251"?>’;
?>
<rss version="2.0">
<channel>
<title>SKLYAROFF</title>
<link>http://www.sklyaroff.ru/</link>
<description>MY BLOG</description>
<copyright>Copyright (c) Sklyaroff Ivan</copyright>
<?php
// Подключаемся к базе данных
require_once("connect.php");
// Выполняем запрос к таблице
$res = ("SELECT * FROM MESSAGES ORDER BY date DESC LIMIT 30");
while ($data = ($res)) {
// Преобразуем дату к формату RFC-822
$date_rfs822 = ("%a, %d %b %Y", ($data->date));
$time_rfs822 = ("%H:%M:%S %z", ($data->time));
// Выводим содержимое item
echo <<<END
<item>
<title>$data->topic</title>
<link>http://www.sklyaroff.ru/comm.php?mess=$data->id</link>
<pubDate>$date_rfs822 $time_rfs822</pubDate>
<description><![CDATA[$data->message]]></description>
</item>
END;
}
// Теперь можно закрыть соединение с базой данных
();
?>
</channel>
</rss>
Я вывожу только 30 последних записей из таблицы, но если убрать LIMIT 30, то в RSS ленту попадут сразу все записи из таблицы. При наличии слишком большого количества записей в таблице, лучше все-таки ограничивать вывод.
Если вы решите использовать этот PHP-скрипт на своем сайте, то рекомендую еще добавить в блок <head> страниц вашего сайта следующую строку (разумеется, URL ленты замените на свой):
<link rel=”alternate” type=”application/rss+xml” title=”RSS 2.0″ href=”http://www.sklyaroff.ru/rss_mess.php”>
Эта строка сообщает браузеру, что на сайте присутствует RSS-лента.
Related posts:
- Публикации новостей в форматах RSS и Atom Появление технологий RSS и Atom повлекло за собой новую...
- 10 главных ошибок RSS Сегодня RSS используется очень и очень часто, и все...