Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Как сделать свою RSS-ленту

Источник: realcoding.net

Полагаю, что практически все слышали о том, что бывают ленты новостей. Но далеко не все сайтовладельцы пользуются этой несомненно полезной вещью. А ведь если Вы - владелец форума или новостного сайта, rss - штука весьма нужная, она позволит Вашим посетителям просматривать заголовки новостей и заходить на сайт только для прочтения того, что им действительно нужно и интересно. Одним словом, я решил по возможности коротко рассказать о том, как создать свою rss-ленту, взяв как пример скрипт, сделанный мною для нашего форума.


Для начала выдаем правильный content-type:

header(content-type: application/rss+xml);

Затем формируем заголовок ленты:

<?xml version=1.0 encoding=koi8-r?>
<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:
&
lt;a href=http://recovered.info/viewtopic.php?t=.$topic_id.&gt;.
htmlspecialchars($topic_title).
&lt;/a&gt;
&
lt;br /&gt;
forum:
&
lt;a href=http://recovered.info/viewforum.php?f=.$forum_id.&gt;.
htmlspecialchars($forum_name).
&lt;/a&gt;
</
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-лент - это именно неверное указание времени публикации, что приводит к большой путанице в ленте и неудобствам при чтении. Кстати говоря, дату можно указывать и используя таг <pubdate> - в этом случае она должна соответствовать rfc 822.

После вывода всех записей остается только закрыть ленту:

</channel>
</
rss>

А теперь посмотрим, как выглядит готовый скрипт для вывода ленты сообщений форума, использующего движок phpbb:

<?php

include(config.php);

header(content-type: application/rss+xml);

echo
<?xml version=1.0 encoding=koi8-r?>
<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>
;

if (!(
$mysql = mysql_connect($dbhost, $dbuser, $dbpasswd)))
return
0;

if (!(
$db = mysql_select_db($dbname)))
return
0;

$result = mysql_query(select phpbb_posts.topic_id, max(phpbb_posts.post_id),
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
);

while (list(
$topic_id, $post_id, $topic_title,
$forum_name, $last_post_time, $forum_id) = mysql_fetch_row($result)) {
echo

<item>
<title>
.htmlspecialchars($topic_title).</title>
<link>http://recovered.info/viewtopic.php?p=
.$post_id.#.$post_id.</link>
<description>
topic:
&lt;a href=http://recovered.info/viewtopic.php?t=
.$topic_id.&gt;.
htmlspecialchars($topic_title).
&lt;/a&gt;
&lt;br /&gt;
forum:
&lt;a href=http://recovered.info/viewforum.php?f=
.$forum_id.&gt;.
htmlspecialchars($forum_name).
&lt;/a&gt;
</description>
<category>
.
htmlspecialchars($forum_name).
</category>
<dc:date>
.
strftime(%y-%m-%dt%h:%m:%s+02:00, $last_post_time).
</dc:date>
</item>
;

}
// while - fetch rows

mysql_free_result($result);

echo

</channel>
</rss>
;

mysql_close($mysql);

?>



Похожие статьи:
- Php блокировка
- Что такое PageRank Googleа и как получить его по максимуму
- Бизнес на подкастах - уже реальность
- Дата на русском языке
- DDOS-атаки и методы борьбы с ними
- PHP пример парсинга URL для «User Friendly URLs»
- Неоправданное использование ООП
- Рисуем Елку


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]