RSS — семейство XML-форматов, предназначенных для описания лент
новостей, анонсов статей, изменений в блогах и т. п. Информация из
различных источников, представленная в формате RSS, может быть собрана,
обработана и представлена пользователю в удобном для него виде
специальными программами-агрегаторами. Обычно с помощью RSS 2.0 даётся
краткое описание новой информации, появившейся на сайте, и ссылка на её
полную версию. Интернет-ресурс в формате RSS называется RSS-каналом или
RSS-лентой или RSS-фидом. Практически все популярные современные
браузеры поддерживают RSS каналы: Safari, Maxthon, Mozilla Firefox,
Mozilla Thunderbird, Opera, Microsoft Internet Explorer начиная с 7-й
версии. Я не буду останавливаться на истории формата, скажу лишь что
существуют версии 0.91, 1.0 и 2.0, причем не совместимые между собой.
Крайне не рекомендую вам использовать версию 0.91, потому что умная
Netscape 5 января 2006 года удалила с сайта my.netscape.com файл
rss-0.91.dtd, ссылки на который были размещены в большом количестве
трансляций формата RSS версии 0.91. Это событие привело к сбою некоторых
онлайновых и офлайновых агрегаторов, так как потоки, ссылающиеся на
этот DTD стали невалидными. Мы же рассмотрим самый последний формат на
момент написания этой статьи - RSS 2.0.
Пример формата RSS 2.0 и описание тегов
По своей сути RSS напоминает обычный XML файл:
<rss version="2.0">
<channel>
<title>My News</title>
<link>http://mysite.com/</link>
<description>News from my family.</description>
<language>en-us</language>
<pubDate>Tue, 10 Jun 2006 04:00:00 GMT</pubDate>
<lastBuildDate>Tue, 10 Jun 2006 09:41:01 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>Weblog Editor 2.0</generator>
<managingEditor>editor@mysite.com</managingEditor>
<webMaster>webmaster@mysite.com</webMaster>
<item>
<title>My Birthday</title>
<link>http://mysite.com/blog/2006/mybirthday.php</link>
<description>I celebrate my birthday today!</description>
<pubDate>Tue, 01 Jun 2006 09:39:21 GMT</pubDate>
<guid>http://mysite.com/blog/2006/06/01.html#item1</guid>
</item>
<item>
<title>My new PC</title>
<link>http://mysite.com/blog/2006/mynewpc.php</link>
<description>I want to buy new PC.</description>
<pubDate>Tue, 27 May 2006 08:37:32 GMT</pubDate>
<guid>http://mysite.com/blog/2006/05/27.html#item1</guid>
</item>
</channel>
</rss>
Обязательные элементы канала |
title |
Имя RSS канала. Оно например может совпадать с названием сайта. |
description |
Краткое описание RSS канала. |
link |
Ссылка на сайт, с которым связан канал. |
Необязательные элементы канала (channel) |
language |
Язык канала (en-us - Английский; ru - Русский). |
copyright |
Сведения об авторстве на RSS канал. |
managingEditor |
Email адрес ответственного за контент канала. |
webMaster |
Email адрес ответственного за техническую часть публикации канала. |
pubDate |
Дата публикации канала, в соответствии с Date and Time Specification of RFC 822. |
lastBuildDate |
Время последней модификации канала в соответствии с Date and Time Specification of RFC 822. |
category |
Одна или несколько категорий, к которым принадлежит канал. |
generator |
Название программы, использованной для генерирования RSS канала. |
docs |
Ссылка на файл документации подвида RSS, который был использован для создания канала. |
ttl |
Ttl расшифровывается как ‘time to live’. Это число минут, в течение которых канал сохраняет свою актуальность. |
image |
Используется для подключения графического файла (GIF, JPEG,
или PNG), который будет показан вместе с RSS каналом. Имеет следующие
параметры: title - обычно тот же текст, что и в RSS title; description - описание графического файла, которое будет показано, если файл не доступен; link - ссылка на страницу, с которой связан канал; url - URL на файл формата JPEG, GIF или PNG, который связан с RSS каналом; width - ширина рисунка. height - высота рисунка. |
skipHours |
Число часов, в течение которых RSS ридеры могут не проверять канал на обновления. |
skipDays |
Число дней, в течение которых RSS ридеры могут не проверять канал на обновления. |
Обязательные элементы итема (item) |
title |
Имя итема (новости, сообщения) RSS канала. |
description |
Краткое описание итема. |
link |
ссылка на страницу, содержащую полное описание события. |
Необязательные элементы итема (item) |
author |
Email адрес автора сообщения. |
category |
Категория итема. |
comments |
Ссылка на страницу с комментариями по итему. |
enclosure |
Описывает медиа-объект, присоединенный к итему. Имеет следующие параметры: url - ссылка на файл объекта; length - размер файла в байтах; type - тип файла, в соответствии со спецификацией MIME. |
guid |
Уникальная строка, используемая для идетификации итема. |
pubDate |
Дата публикации итема, в соответствии с Date and Time Specification of RFC 822. |
Конечно же тут приведены не все теги стандарта RSS, но я вас уверяю
что этого больше чем достаточно для создания фида, ну а для особо
интересующихся дам ссылку на спецификацию RSS 2.0.
Реализация на PHP 5
Я не стал городить классы и шаблоны, а сделал все достаточно прямолинейно:
// Задаем формат даты
define('DATE_FORMAT_RFC822','r');
// Сообщяем браузеру что передаем XML
header("Content-type: text/xml; charset=windows-1251");
// Дата последней сборки фида
$lastBuildDate=date(DATE_FORMAT_RFC822);
echo <<
<rss version="2.0">
<channel>
<title>mysite.com RSSFeed</title>
<link>http://mysite.com</link>
<description>Мой супер блог</description>
<pubDate>$lastBuildDate</pubDate>
<lastBuildDate>$lastBuildDate</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>Weblog Editor 2.0</generator>
<copyright>Copyright 2006 mysite.com</copyright>
<managingEditor>editor@mysite.com</managingEditor>
<webMaster>webmaster@mysite.com</webMaster>
<language>ru</language>
END;
// В этом файле надо разместить подключение к базе данных
include_once("db.php");
// Модифицируйте запрос под вашу таблицу
$query = "SELECT name, anon, url, UNIX_TIMESTAMP(date) as pubdate
FROM news
WHERE visible=1
ORDER by date desc
LIMIT 0,10";
$res = mysql_query($query);
while ($row=mysql_fetch_array($res)) {
// Убираем из тайтла html теги и лишние пробелы
$title = strip_tags(trim($row['name']));
// С аноносом можно не проводить такие
// манипуляции, т.к. мы вставим его в блок CDATA
$anon = $row['annonce'];
$url = $row['uri'];
$pubDate = date(DATE_FORMAT_RFC822, $row['pubdate']);
echo <<<END
<item>
<title>$title</title>
<description><![CDATA[$anon]]></description>
<link>http://mysite.com/news/$url</link>
<guid isPermaLink="true">http://mysite.com/news/$url</guid>
<pubDate>$pubDate</pubDate>
</item>
END;
}
echo <<<END
</channel>
</rss>
END;
?>
Как видите все получилось довольно просто. Чтобы увидеть результат
можно просто ввести в браузере Opera 9 адрес фида:
http://mysite.com/rssfeed.php. Также можно сообщить браузеру о
существовании фида, добавив в блок <head> страниц вашего сайта
строку:
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://mysite.com/rssfeed.php" />