Главная » Полезные статьи » Язык PHP » Как сделать свою RSS-ленту
Распечатать статью

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

Полагаю, что практически все слышали о том, что бывают ленты новостей. Но далеко не все сайтовладельцы пользуются этой несомненно полезной вещью. А ведь если Вы — владелец форума или новостного сайта, 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); ?>
Источник: internet-technologies.ru
Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи