Как сделать свою RSS-ленту
Полагаю, что практически все слышали о том, что бывают ленты новостей. Но далеко не все сайтовладельцы пользуются этой несомненно полезной вещью. А ведь если Вы - владелец форума или новостного сайта, RSS - штука весьма нужная, она позволит Вашим посетителям просматривать заголовки новостей и заходить на сайт только для прочтения того, что им действительно нужно и интересно. Одним словом, я решил по возможности коротко рассказать о том, как создать свою RSS-ленту, взяв как пример скрипт, сделанный мною для своего форума.
Для начала выдаем правильный content-type:
Затем формируем заголовок ленты:
-
<?xml version="1.0" encoding="utf-8"?>
-
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-
<channel>
-
<title>Recovered.info</title>
-
<link>http://recovered.info/</link>
-
<description>Recovered.info Forum</description>
-
<language>ru-ru</language>
Следует обратить внимание на кодировку документа (encoding), а также заголовок, описание, ссылку и язык. Хотя, как показывает опыт, большинство RSS-reader'ов показывает только название ленты, скрывая остальную информацию.
Далее мы собственно должны вывести ленту новостей. Каждая запись состоит из заголовка (title), ссылки (link), описания (description) и даты (dc:date). Обязательными параметрами являются заголовок и ссылка, остальное можно при желании опустить. Или, наоборот, добавить имя автора, категорию или еще что-нибудь (см. описание стандарта).
-
<item>
-
<title>'.htmlspecialchars($topic_title).'</title>
-
<link>http://recovered.info/viewtopic.php?p='.$post_id.'#'.$post_id.'</link>
-
<description>
-
Topic:
-
<a href="http://recovered.info/viewtopic.php?t='.$topic_id.'">'.
-
htmlspecialchars($topic_title).
-
'</a>
-
<br />
-
Forum:
-
<a href="http://recovered.info/viewforum.php?f='.$forum_id.'">'.
-
htmlspecialchars($forum_name).
-
'</a>
-
</description>
-
<category>'.
-
htmlspecialchars($forum_name).
-
'</category>
-
<dc:date>'.
-
strftime('%Y-%m-%dT%H:%M:%S+02:00', $last_post_time).
-
'</dc:date>
-
</item>
Обратите внимание на то, что внутри тагов не должна встречаться спец-символы (<, > и т.д.). А также на формат времени (YYYY-mm-ddTHH:MM:SS+offset). Весьма распространенный недочет RSS-лент - это именно неверное указание времени публикации, что приводит к большой путанице в ленте и неудобствам при чтении. Кстати говоря, дату можно указывать и используя таг
После вывода всех записей остается только закрыть ленту:
-
</channel>
-
</rss>
А теперь посмотрим, как выглядит готовый скрипт для вывода ленты сообщений форума, использующего движок phpBB:
-
<?php
-
-
include('config.php');
-
-
-
echo '<?xml version="1.0" encoding="utf-8"?>
-
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-
<channel>
-
<title>Recovered.info</title>
-
<link>http://recovered.info/</link>
-
<description>Recovered.info Forum</description>
-
<language>ru-ru</language>';
-
-
return 0;
-
-
return 0;
-
-
phpbb_topics.topic_title, phpbb_forums.forum_name,
-
MAX(phpbb_posts.post_time) as last_post_time,
-
phpbb_forums.forum_id
-
FROM phpbb_topics, phpbb_posts, phpbb_forums
-
WHERE ( phpbb_topics.topic_id = phpbb_posts.topic_id ) and
-
( phpbb_topics.forum_id = phpbb_forums.forum_id )
-
GROUP BY phpbb_posts.topic_id
-
ORDER BY last_post_time DESC
-
LIMIT 15');
-
-
echo '
-
<item>
-
<link>http://recovered.info/viewtopic.php?p='.$post_id.'#'.$post_id.'</link>
-
<description>
-
Topic:
-
<a href="http://recovered.info/viewtopic.php?t='.$topic_id.'">'.
-
'</a>
-
<br />
-
Forum:
-
<a href="http://recovered.info/viewforum.php?f='.$forum_id.'">'.
-
'</a>
-
</description>
-
<category>'.
-
'</category>
-
<dc:date>'.
-
'</dc:date>
-
</item>';
-
-
} // while - fetch rows
-
-
-
echo '
-
</channel>
-
</rss>';
-
-
-
?>
Дополнительные материалы:


October 4th, 2007 at 17:56 Quote
написал rss feeder,
но при чтении например thunderbird'om при каждом рефреше все items скачиваются заново,
как пофиксить??
October 5th, 2007 at 08:36 Quote
art @ 04.10.2007, 17:56 #
либо это причуда Thunderbird'а, либо содержимое ленты постоянно меняется. проверьте, чтобы старые элементы всегда генерировались одинаковыми.
October 5th, 2007 at 12:29 Quote
и вправду оказалось странностью thunderbird'а
другие ридеры так не делают ..