RSS – это просто!



В первой части статьи я расскажу о том, что представляет из себя RSS (вдруг этого еще кто-то не знает? :), во второй поговорим о создании собственного канала RSS.

первое знакомство

Представьте себе, что у вас имеется собственный сайт, и вы, не покладая рук, трудитесь изо дня в день, наполняя его полезным (и главное - интересным) содержанием. Добавляете новости, ссылки и др. А если на вашем сайте имеется форум, то его содержание меняется с катастрофической быстротой. Как же проще всего донести эту информацию до конечного пользователя, который заинтересован в первую очередь в быстром получении актуальной на данный момент информации. Со стороны простого пользователя сети это выглядит примерно так: пришел на работу, включил компьютер, открыл кучу ссылок из закладок (попутно загрузив из сети целую тучу разного барахла – флэш-роликов, баннеров и т.д.). Все это, безусловно, отнимает драгоценное время, а самое главное - трафик (не все еще перешли на ADSL, да и у пользователей хDSL трафик не бесплатный, а канал – не резиновый). Кроме того, бесконечные reload-ы страниц и вылавливание из горы информации только того, что нужно очень и очень нервирует. Где же выход? Выход в использовании RSS.

К слову, абревиатура эта может расшифровываться по-разному, поскольку указывает на три связанных друг с другом по тематике стандарта: - Rich Site Summary (RSS 0.91);
- RDF Site Summary (RSS 0.9 и 1.0);
- Really Simple Syndication (RSS 2.0).


Чтобы использовать RSS, конечному пользователю следует найти и скачать так называемый RSS-агрегатор – программу, которая берет на себя неблагодарный труд по вылавливанию в сети нужной и актуальной информации. Программы имеются под различные операционные системы, и они, в большинстве своем, бесплатные. Их можно без труда найти на любом поисковом сайте. Под семейство Linux упомяну две из них - Akregator и Knewsticker (существуют, конечно, и другие клиенты для RSS - на этих двух свет клином не сошелся. Я пользуюсь ими потому, что меня они пока устраивают и становятся по умолчанию в моем дистрибутиве). Первая программа – автономная, а вторая является частью kdenetwork и при своем запуске встраивается в панель задач KDE. С программами уже поставляется список RSS-каналов. Если хорошо знаете английский, можете посмотреть - там имеются ссылки на весьма интересные англоязычные проекты различной тематики.

Да! Совсем забыл упомянуть горячо любимый мной норвежский браузер Opera (с недавнего времени совершенно бесплатный) – он то же позволяет просматривать RSS-потоки.
Большой список русскоязычных RSS-лент можно посмотреть на www.kanban.ru.

После подключения к Internet, добавления ссылки на RSS-канал, программа-агрегатор связывается с сервером и получает список новостей, которые выводит в удобном для пользователя виде. Теперь вам не надо зря качать большие объемы ненужной информации – вы можете просматривать только те новости, которые вас заинтересовали!

практикум

Как же создать собственный RSS-канал? Это не очень сложно. Надо только определиться с задачами. Можно, к примеру, организовать вывод последних сообщений на форуме в RSS-ленту, можно добавить в нее новости сайта (динамически обновляемые), можно включать в RSS-поток информацию с других ресурсов сети, можно добавлять туда курсы валют, прогноз погоды и др.

Для начала рассмотрим формат этого пресловутого RSS-файла.

||Эта строка говорит о том, что формат файла – XML, а кодировка - UTF-8 |
| |(это рекомендованное значение, но часто используется значение |
| |windows-1251, сами знаете почему). |
||Служебная информация о версии RSS. Этот параметр изменять не стоит. |
||Открывающий тегговорит о том, что далее будут следовать теги |
| |описания канала. |
|Channel name|Секция, которая описывает название канала (должна присутствовать |
| |обязательно). |
|>http://192.168.1.229/icecastweb/ |Эта секция описывает ссылку на сайт, соответствующий каналу. В моем |
| |конкретном случае, как видите, это http://192.168.1.229/icecastweb/ |
| |(должна присутствовать обязательно). |
|Channel description|Секция описания канала (должна присутствовать обязательно). |
|Далее следуют необязательные параметры. |
|ru|Язык, на котором будет публиковаться информация в канале. Я в своем |
| |случае поставлю ru |
|Copyright 2005, Kirill|Авторские права на этот канал (информация должна быть на английском |
| |языке) |
|managingEditor>sutulo@tut.by|E-mail редактора канала. Ставлю свой. |
|sutulo@tut.by|E-mail вебмастера сайта. Опять мой. |
|Tue, 18 Oct 2005 12:00:00 GMT|Дата публикации канала (вместо GMT можно ставить временную зону – для |
| |Минска это +0200. |
|Tue, 18 Oct 2005 12:00:00 +0200|Дата последнего изменения содержимого. |
|Kedit|Программа, используемая для создания RSS-файла. Ну, допустим, Kedit. |
|600|Время в секундах, которое показывает, сколько надо хранить канал в cache.|
||Эти теги описывают картинку, которую показывают RSS-агрегаторы для этого |
|>http://192.168.1.229/icecastweb/logo.jpg |канала (поддерживается не всеми RSS-агрегаторами). Здесь: |
|Icecast|- ссылка на картинку; |
|>http://192.168.1.229/icecastweb/ |- краткое описание картинки (соответствует ALT-атрибуту HTML-тэга|<br>|<width>88</width>|); |<br>|<height>31</height>|<link>- ссылка на то, куда мы попадем, нажав на картинку; |<br>|<description>Description<description>|<width>и<height>- размер картинки в пикселях. Максимальная ширина - |<br>|</image>|144, по умолчанию - 88. Максимальная высота - 400, по умолчанию 31; |<br>| |<description>- всплывающая подсказка, возникающая при наведении на |<br>| |картинку указателя мыши. |<br>|Далее следуют элементы<item>- собственно новости. Новости описываются между тегами<item>и</item>. |<br>|<item>|Открывающий тег новости. |<br>|<title>Test message (тест)<title>|Название новости. |<br>|<link>|Ссылка на новость. |<br>|<a href = http://localhost/news/news01.html>http://localhost/news/news01.html</a> | |<br>|</link>| |<br>|<description>...................................................</descrip|Новость полностью или частично. |<br>|tion>| |<br>|<pubDate>Tue, 18 Oct 2005 12:00:00 +0200</pubDate>|Дата публикации новости. |<br>|</item>|Закрывающий тег новости. |<br>|<item></item>|Другие новости. |<br>|...................... | |<br>|<item></item>| |<br>|</channel>|Закрывающие теги канала и RSS. |<br>|</rss>| |<br></tt><br>Вот и все. Если создать такой файл и разместить его на сервере, то при занесении его адреса в RSS-агрегатор мы должны получить список новостей. «Но где же автоматизация?» - спросите вы и будете совершенно правы: вручную создавать RSS-файлы – занятие не из приятных. Так давайте же все автоматизируем! Перейдем, так сказать, от теории к грубой реальности.<br><br>Я поставил перед собой следующую простую задачу: у меня на локальном сервере имеется простой текстовый файл news, в который я вручную буду заносить важные, по моему мнению, новости. На основе этого файла и должен формироваться RSS-поток.<br><br>Приступим. На локальном сервере я создал каталог rss (в моей системе это /var/www/rss) и поместил в него следующий скрипт с именем rss_script:<br>#! /bin/sh<tt><br>echo \<\?xml version=\"1.0\" encoding=\"windows-1251\"?\>>file.rss<br>echo \<rss version=\"2.0\"\>>>file.rss<br>echo \<channel\>>>file.rss<br>echo \<title\>Новости нашей локальной сети\</title\>>>file.rss<br>echo \<link\><a href = http://192.168.1.229/icecastweb/>http://192.168.1.229/icecastweb/</a> \</link\>>>file.rss<br>echo \<description\>Новости \</description\>>>file.rss<br>echo \<image\>>>file.rss<br>echo \<url\><a href = http://localhost/rss/logo.jpg\</url\>>http://localhost/rss/logo.jpg\</url\></a> >>file.rss<br>echo \<title\>Новости нашей локальной сети\</title\>>>file.rss<br>echo \<link\><a href = http://192.168.1.229/icecastweb/>http://192.168.1.229/icecastweb/</a> \</link\>>>file.rss<br>echo \</image\>>>file.rss<br>echo \<language\>ru\</language\>>>file.rss<br>echo \<pubDate\>>>file.rss<br>env LANG=en date --rfc-2822 >>file.rss<br># получаем и выводим текущую дату и время в формате RCF-2822<br>echo \</pubDate\>>>file.rss<br>echo \<lastBuildDate\>>>file.rss<br>env LANG=en date --rfc-2822 >>file.rss<br>echo \</lastBuildDate\>>>file.rss<br>echo \<item\>>>file.rss<br>echo \<title\>Последняя новость от меня любимого \</title\>>>file.rss<br>echo \<link\><a href = http://192.168.1.229/icecastweb/>http://192.168.1.229/icecastweb/</a> \</link\>>>file.rss<br>echo \<description\>>>file.rss<br>cat /var/www/rss/news >>file.rss<br># считываем новость из файла news и записываем ее в файл rss потока<br>echo \</description\>>>file.rss<br>echo \<pubDate\>>>file.rss<br>env LANG=en date --rfc-2822 >>file.rss<br>echo \</pubDate\>>>file.rss<br>echo \</item\>>>file.rss<br>echo \</channel\>>>file.rss<br>echo \</rss\>>>file.rss<br></tt><br>Этот скрипт, как видите, предельно прост. Его задача - сформировать RSS-поток. Единственные динамические данные в нем - это дата, время и, собственно, новость, которая считывается из файла news. Теперь дело за малым – следует организовать запуск этого скрипта в нужное нам время (либо когда содержимое файла изменилось). Я пошел самым простым путем. Так как новости я не планирую обновлять более 2 раз в день, то запуск скрипта я переложил на могучие плечи cron, и организовал его выполнение дважды в сутки – в 10-00 и в 15-00.<br><br>Заключительный шаг – проверка работоспособности. После запуска RSS-агрегатора я добавляю в него адрес RSS-потока <a href = http://localhost/rss/file.rss>http://localhost/rss/file.rss</a> и... по видимому все работает. Новости исправно появляются.<br>Вот собственно и все.<br><br><br><br><br><br><b>Zwalker, sutulo@tut.by.</b><br></div> <br><br><i>Сетевые решения. Статья была опубликована в номере 10 за 2005 год в рубрике <a href='/sr/abc/%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8/'>технологии</a></i> <!-- rotate-text-bottom --> </div> <script src="https://yastatic.net/share2/share.js"></script> <div class="ya-share2" data-services="vkontakte,facebook,twitter,reddit,digg, evernote,linkedin,pocket" data-limit="3" style="margin-top:20px"></div> </div> <div class=rrb></div> </div> <!-- rotate-bottom1 --> <!-- rotate-bottom2 --> </div> <div class=width> <div class=bc id=bc><div class=menu><a class=menu__a href=/sr/news/>все новости</a><a class=menu__a href=/sr/arch.html>архив статей</a><a class=menu__a href=/kg/>кг</a><a class=menu__a href=/sr/aboutus.html>редакция</a><a class=menu__a href=/kg/press/index.html>пресс-центр</a><a class=menu__a href=https://pressenter.ru/>новый сайт КГ - PressEnter.ru</a></div></div> <div class=cont> <a href=/ class=none><img class=cont__nestorlogo src=/nestor.gif alt="Основная страница издательства Нестор"></a><br> ©1999-2024 Сетевые решения </div> </div> </div> <script> document.captureEvents(Event.click);document.onclick=dockclick; function dockclick(e) { if (/https?:/.test(e.target)) {createRequest();str = e.target.id;url = "/clickdocker.pl?a=" + escape(e.target) + "&advid=" + str;request.open("GET", url, true);request.send(null);} return true;} function createRequest() {try{request = new XMLHttpRequest();}catch (trymicrosoft) {try{request = new ActiveXObject("Msxml2.XMLHTTP");}catch(othermicrosoft){try{request=newActiveXObject("Microsoft.XMLHTTP");}catch(failed){request=false;}}};} </script> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(29246180, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/29246180" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> </body> </html>