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" />
|