RSS 2.0 лента на PHP 5
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 файл:
<?xml version="1.0"?>
<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
Я не стал городить классы и шаблоны, а сделал все достаточно просто:
<?php
// Задаем формат даты
define('DATE_FORMAT_RFC822','r');
// Сообщяем браузеру что передаем XML
header("Content-type: text/xml; charset=windows-1251");
// Дата последней сборки фида
$lastBuildDate=date(DATE_FORMAT_RFC822);
echo <<<END
<?xml version="1.0" encoding="windows-1251"?>
<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" />
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Вася
13.01.2008
Постоянная ссылка (Permalink)
Спасибо за статью! Я теперь сделал у себя в блоге RSS ленту, только возник вопрос: как вы сделали отображение количества комментариев в фиде через FeedBurner?
Денис
30.01.2008
Постоянная ссылка (Permalink)
Спасибо за отличную статью. Всегда обращаюсь к ней если забываю те или иные теги RSS-канала.
Виктор
06.01.2009
Постоянная ссылка (Permalink)
На моём форуме есть закрытые разделы. Делаю RSS постов форума. Как сделать авторизацию по RSS? Чтобы ленту могли смотреть только те, кто имеет доступ в закрытые разделы? В RSS-ридерах есть поля Логин и Пароль, непонятно только, КАК они их передают скрипту.
Влад
18.11.2009
Постоянная ссылка (Permalink)
Очень помогла статья - у меня была ошибка с выводом даты в Яндекс-Виджете. Спасибо.
Andreafoene And...
03.02.2021
Постоянная ссылка (Permalink)
По моему, у кого-то буквенная алексия :)
---
Извиняюсь, что ничем не могу помочь. Надеюсь, Вам здесь помогут. скачать fifa, скачать фифа и fifa 15 скачать фифа