Препарируем RSS : Технология RSS : Экспорт информации в RSS
В последнее время всё популярнее становятся разговоры об унификации и стандартизации информации, распространяемой в web-среде. В самом деле, порой нелегко бывает отыскать что-то нужное среди вороха страниц; пользователи всё больше устают от назойливой рекламы и некачественного дизайна. Поэтому в определённый момент появилась технология, которая позволила полностью отделить текстовую информацию от определённого графического представления и легко обмениваться ею, избегая любых конфликтов. Сегодня речь пойдёт как раз об этом - о стандарте RSS. Мы напишем свою ленту и подумаем над тем, как импортировать данные из чужих блогов.
Разбираемся в технологии и пишем свою новостную ленту.
Для чего?
RSS - это технология, которая в силу своего удобства и функциональности пришлась по душе миллионам пользователей. Самые крупные интернет проекты уже не скупятся на то, чтобы предоставлять информацию в этом формате. За примером далеко ходить не надо - любой новостной сайт экспортирует свои новости в RSS, Яндекс открыл свою собственную, очень удобную службу индексирования новостных RRS лент, и даже в ЖЖ давно уже есть возможность читать дневники в этом формате.
Так что если для тебя аббревиатура RSS не значит ровным счётом ничего, то ты здорово отстал от жизни, и тебе надо обязательно изучить новую технологию. Тем более что она проста как два рубля и гениальна как пакет кефира. Также присутствие RSS ленты на любом интернет - проекте делает его весьма солидным и здорово отличает от конкурентов. По этому если у тебя есть свой сайт, на котором ты регулярно размещаешь новые материалы, RSS лента здорово поможет тебе поднять популярность твоего ресурса. И просто сделает его более качественным, современным и удобным.
Что это такое?
RSS - Really Simple Syndication. Какая ещё "реально простая синдикация", что за бред? На самом деле всё просто. Последнее слово можно перевести как "приобретение", а всю аббревиатуру как "Чрезвычайно простое приобретение информации". Это такой способ обмена текстовыми данными в web среде, который основан на том факте, что информация на всех сайтах имеет схожую структуру и может быть приведена к общему формату.
Как и следовало ожидать, RSS - это язык, являющийся подмножеством XML, и поэтому все RSS документы должны соответствовать стандарту
XML 1.0 (www.w3.org/tr/rec-xml). Однако сам стандарт RSS определён на один уровень выше и имеет вполне чёткое описание, которое я тебе сейчас и приведу в сжатом виде.
Стандарт RSS
На верхнем уровне любого RSS документа находится элемент
<rss>, который содержит обязательный атрибут version, указывающий на версию документа. В этой статье я буду описывать версию 2.0, поэтому атрибут version должен иметь соответствующее значение.
Уровнем ниже от <rss> лежит элемент
<channel>, который встречается однажды и несёт всю основную информацию об RSS канале и его содержимом. Элемент
<channel> обязательно имеет в себе троих потомков: title - заголовок блока, link - ссылка на соответствующий ленте web ресурс и description - описание ленты.
Внутри этого элемента может присутствовать ещё куча тэгов, однако основной интерес для нас будут представлять элементы
<item>, в которых находится информация о публикациях. Внутри <item> может содержаться большое число элементов: title, link, description, category, comments, enclosure, guid, pupDate, и sourse. Назначение каждого из этих полей, в общем-то, ясно из названия, но чтобы тебе было понятно, я просто приведу пример небольшого RSS документа:
<?xml version="1.0" encoding="windows-1251" ?>
<rss version="2.0">
<channel>
<title>Мои новости</title>
<link>http://site.ru</link>
<description>Описание моих новостей</description>
<image>
<url>http://site.ru/moiLogotip.gif</url>
<link>http://site.ru</link>
<title>Мои новости</title>
</image>
<lastBuiltDate>16 feb 2008 18:05:12 +0300</lastBuildDate>
<item>
<title>Сегодня на сайте новая статья!</title>
<link>http://site.ru/?str=news</link>
<description>Сегодня была опубликована новая статья - посвященная RSS</description>
<pubDate>16 feb 2008 18:05:12 +0300</pubDate>
<guid> http://site.ru/?str=news</guid>
</item>
</channel>
</rss>
Такой вот формат. Обрати внимание: элемент
<image> позволяет указать соответствующую твоему каналу картинку. Что касается остальных неизвестных тебе тэгов, то знай, что
<pubDate> определяет время публикации, а
<guid> - это уникальный идентификатор записи, например соответствующий её web адрес.
И что здесь красивого?
Ты, наверное, ещё не совсем осознал, чем же всё это так здорово. Абсолютно согласен с тобой: просматривать новости, разглядывая тэги xml документа, не самое романтичное занятие. Однако пойми простую вещь: перед просмотром лента должна быть сформирована, то есть её xml представление слижет лишь источником необходимой информации, а оформление предоставляется клиентским приложением, при помощи которого пользователь просматривает твою ленту. Написать такое приложение совсем не сложно, и в настоящий момент уже создано достаточное количество функциональных программ, которые оформляются как самостоятельно, так и в форме плагинов.
Сейчас мы напишем с тобой своё собственное web приложение на PHP, которое будет экспортировать данные в RSS.
Архитектура блога
Да ну какая тут архитектура. Всё просто. В базе MySQL есть таблица rssblog, которая имеет следующую структуру:
CREATE TABLE rssblog (pid int not null primary key auto_increment, pupDate date, title text, descr text);
Соответственно, в этой таблице хранятся посты, которые нам надо выводить в RSS ленту. Написать скрипт, который будет добавлять новости в таблицу, - это элементарно, наверняка вы это не раз проворачивали. Так что я сегодня более подробно расскажу об экспорте данных.
Всё очень просто. Сначала элементарным запросом мы выбираем десять последних записей, сортируя их по времени публикации, а затем в цикле по всем возвращённым строкам начинаем строить RSS документ, жёстко следую описанному формату. В результате несложно получить такую вот функцию:
function BuildRss($title, $link, $desc)
{
$re=mysql_query("select * from rssblog order by pid desc limit 10");
echo "<?xml version=\"1.0\" encoding=\"windows-1251\" ?>\n";
echo "<rss version=\"2.0\">
<channel>
<title>$title</title> # Заголовок ленты
<link>$link</link> # Ссылка на сайт
<description>$desc</description>";
# Цикл по всем нужным записям в таблице
while($res=mysql_fetch_arrey($re)){
echo "
<item> # Новый пост
<title>$res[title]</title> # Заголовок из базы
<link>$res[link]</link> # ссылка из базы
<description>$res[descr]</description> # описание из базы
<pubDate>$res[pubDate]</pubDate> # дата публикации из базы
<guid>$link/?str=$res[pid]</guid> # Идентификатор (как пример)
</item>";
}
echo "</channel>
</rss>";
}
Теперь, если сохранить эту процедуру в php скрипте и выполнить её на сервере, клиенту вернётся RSS документ, который удобнее всего просматривать при помощи специальной программы вроде ActiveRefresh (
Скачать ActiveRefresh v.2.5.3 740кб).
Выводы
Согласись, всё просто элементарно! По большому счёту, создать RSS ленту ничуть не сложнее, чем сформировать, скажем, html таблицу: нужно лишь знать грамматику языка, а расположить в нужной последовательности тэги - совсем не сложно.
Скачать готовый скрипт
Автор: Никита Кислицин | nikitoz@real.xakep.ru