RSS – обменяемся новостями!

pic
Над дверью висел колокольчик, а на маленькой медной табличке у входа
было написано: «Пластилин Мира. Звонить 126 раз». Петропавел вздохнул и
принялся названивать. Раза два он сбивался и начинал сначала, но на третий
раз постарался быть внимательнее и, аккуратно считая звонки, прозвонил
ровно столько, сколько нужно.
Евгений Васильевич Клюев. Между двух стульев

Через некоторое время после открытия Неформального форума Узнета на нем появилась маленькая оранжевая кнопка с буквами «RSS».

Часть 1. Создать RSS-ленту

Через некоторое время после открытия Неформального форума Узнета на нем появилась маленькая оранжевая кнопка с буквами «RSS».  pic Крутые специалисты разразились восторгами по поводу ее появления, я же никак не мог понять, о чем они говорят. С тех пор прошло несколько лет, активная сетевая жизнь заставила разобраться в этой чудесной технологии, и я удивляюсь, как это раньше без нее обходился и почему сейчас многие разработчики ее не используют? Чтобы разобраться в этом, вам пришлось бы перелопатить много материала, проделать серию опытов, пообщаться со специалистами… я все это прошел и предлагаю сократить этот путь.

Начнем с рассуждений. Все сайты можно условно поделить на две части. Первые содержат статическую, постоянную, справочную информацию, которая практически никогда не изменяется. К ним можно отнести энциклопедии, словари, справочники по разным видам человеческой деятельности. Или домашние странички с добавлением раз в год новых стихов и фотографий. Вторые же содержат динамическую информацию, которая обновляется через некоторое время. Это новостные, аналитические сайты, разного рода авторские проекты и блоги. Конечно, ясно, что множество сайтов сочетают в себе и «статические», и «динамические» черты, но для нашего примера деление будет вполне оправданным.

Как только появились первые контент-проекты, сразу возникла проблема обмена данными между ними. Как пример можно привести появившиеся в 1997 году «ежедневки» и «еженедельки» — регулярные обмены новостями, с которых и началось ЕЖЕ-движение. Вполне нормальная ситуация, когда сайт, посвященный, скажем, киноискусству, будет перепечатывать новости кино. Сайты не конкурируют между собой, а гармонично дополняют друг друга.

Представим себе, что владельцы ресурсов договорились между собой, и осталось только решить технические вопросы. Первый вариант, который сразу приходит на ум, — это вручную переписывать новости или сделать это рассылкой, как было с «ежедневками». Ясно, что надо автоматизировать. Но как? Даже не нужно объяснять, насколько это сложно, достаточно посетить десяток разных сайтов. У каждого свои требования к представлению информации. Даже у человека возникают проблемы с прочтением информации на них, если он не привык к такому ее представлению. Что уж говорить о компьютерной программе, которую придется настраивать на каждый сайт в отдельности. И после каждой смены дизайна сайта-источника вам придется менять свою программу. Это, разумеется, не очень удобно. Но заставить все сайты мира иметь одинаковый дизайн просто невозможно. Впрочем, любой умный человек от этой мысли быстро откажется, поскольку недостатки видны невооруженным взглядом. При большом количестве новостей затруднительно все охватить – и вообще, зачем вручную делать то, что поддается автоматизации. Поэтому появился второй вариант – реализовать трансляцию информации с одного сайта на другой автоматизированными способами.

Долгое время эту проблему пытались решить различными «полумерами». Многие сайты предлагали информацию для экспорта в виде текстового файла с разделителями, java-скрипта и так далее. К счастью, компания Netscape однажды разработала для использования на своем портале Netcenter формат RSS. С его помощью осуществлялся импорт новостей на портал с других сайтов.

Чуть подробнее, для любителей истории Сети, – давным-давно, в марте 1999 года, компания Netscape решила испробовать себя в качестве строителя порталов новой Internet-экономики. Двумя годами раньше Microsoft начала бесплатное распространение своего web-браузера, и к 1999 году финансовые потоки Netscape Communications стали иссякать. Создание централизованного портала по адресу netscape.com дало бы возможность хоть каким-то образом обратить миллионы визитов в рекламные деньги.

Персонализованный сервис по адресу my.netscape.com, помимо стандартных услуг — таких, как прогноз погоды, котировки акций и электронная почта, начал предлагать новости. Их на портал Netscape могли поставлять не только крупные информационные агентства и Internet-службы. Главным условием было соблюдение специального формата RSS – RDF Site Summary, название которого в ту пору содержало аббревиатуру в аббревиатуре, a термин RDF, в свою очередь, расшифровывался как Resource Definition Framework.

К сожалению, компания Netscape довольно скоро прекратила работу над порталом, и формат RSS оказался ненужным. Работу над технологией подхватила компания Userland, которая упростила формат и выпустила спецификацию на RSS 0.91. После этого было еще несколько инкарнаций этого формата, но на данный момент самыми популярными являются версии 0.91 и 2.00.

Не будем утомляться описанием и сравнением устаревших форматов, тем более что сейчас актуален только формат RSS 2.0. Лишь только дно отступление в теорию.

Одним из первых проектов, призванных решить задачи унификации обмена данными между серверами Великой Сети, стал Semantic Web. В его основу была положена следующая идея организации данных в Интернете. Серверы должны были уметь не только визуализировать информацию, но и использовать ее. Таким образом, различные программы разных производителей могли эффективно работать с данными из Сети. Дело оставалось за малым — создать правила формирования блоков информации, которые смог бы понять не только человек, но и компьютер. Именно для проекта Semantic Web были разработаны спецификации XML, предусматривающие разделение содержания, представления и смыслового значения. XML представляет собой метаязык, то есть язык, на базе которого можно определять новые языки. Он предназначен не только для создания программного обеспечения, служащего для организации обмена данными в Web, но и для распознавания семантики этих данных. В отличие от HTML XML предназначен для представления информации в «чистом» виде, предполагая структурную, а не оформительскую разметку данных. То есть, популярнее говоря, передается только содержание документа, без оформления содержания, а оформление уже зависит от тех, кто будет читать или выкладывать это содержание. Это и есть идеальная схема для транслирования новостей.

Итак, что же делать. Если вы хотите транслировать новости со своего сайта? Надо создать файл с расширением .xml, а содержание его лучше рассмотреть на примере «арбузного» файла новостей.

<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
   <channel>
      <title>Арбуз - занимательный мир</title>
      <description>Анонсы новых сообщений на ленте новостей сайта 
      Арбуз - занимательный мир</description>
      <link>http://arbuz.uz</link>
      <copyright>Копируйте на здоровье</copyright>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<ttl>600</ttl>
<language>ru</language>
<lastBuildDate>29 oct 2005</lastBuildDate>
   </channel>
<item>
            <title>Арбузный ломтик со счетами</title>
            <link>http://arbuz.uz/gazeta_48.html</link>
            <description>Никаких задач и фракталов - только арбузные картинки</description>
</item>
<item>
            <title>Может ли время идти вспять?</title>
            <link>http://arbuz.uz/s_time.html</link>
            <description>Мартин Гарднер. Может ли время идти вспять?</description>
</item>
<item>
            <title>Перспективы развития торовых технологий...</title>
            <link>http://arbuz.uz/s_tor.html</link>
            <description>Перспективы развития торовых технологий, эластичной механики и "чудеса", сотворяемые ими в природе
 </description>
. . . . . .
. . . . . .
</rss>

Как видим, все очень просто — первые две строки стандартные – для определения браузером или любой другой программой формата xml. Зона между тегами <channel> и </channel> содержит служебную сопроводительную информацию – заголовок сайта, дату обновления, язык новостей, ссылку, копирайт, время «жизни» новости без кеширования. Далее идут сами новости, каждая новость имеет тело (<item> … </item>), в которое входит заголовок новости (<title>), ссылка на страницу (<link>) и содержание новости (<description>). Выкладывая новый материал на сайт, я добавляю «тело» с информацией о материале. И все пользователи, транслирующие себе новости с сайта, получают информацию об обновлении. Таким образом решена проблема извещения постоянных посетителей об обновлениях. До этого я получал многочисленные просьбы организовать рассылку с обновлениями, но у меня к рассылкам отрицательное отношение, считаю их чем-то сродни спаму, а вот трансляция ленты RSS – самое цивилизованное и технически правильное решение с извещением о новостях сайта.

Единственный небольшой минус – мне приходится каждый раз проделывать это вручную, но крупные проекты, имеющие движки для выкладывания материала, элементарно могут автоматизировать синхронное обновление ленты новостей.

Для ссылки на файл с RSS обычно используются стандартные кнопочки, наверняка вы их часто встречали на сайтах. Они содержат ссылку на этот самый файл RSS.

pic

Часть 2. Читать RSS-ленту

Итак, предположим, вы научились создавать свою ленту новостей в формате xml. А как же читать чужие интересные нам ленты? Во-первых, новая, восьмая Opera позволяет это делать – есть пункт главного меню Feeds, в котором открываются ленты, назначенные для чтения. При попытке открыть файл xml Opera спрашивает – добавить ли его в Feeds? Если добавите, то в любой момент сможете просматривать новости с этой ленты. Необходимо, естественно, подключение к Интернету. Netscape и Firefox выводят на экран содержание файла, как в редакторе, что, конечно, не удобно для чтения. «Народный браузер» Internet Explorer и понятия не имеет о таком формате. Кстати, есть маленький секрет для пользователей Firefox и разработчиков сайтов. Если сайт в разделе заголовков имеет строку

<link rel="alternate" type="application/rss+xml" href="arbuz.xml" title="Арбуз">

(подставьте свои значения), то в статусной строке у всех посетителей появляется кнопочка с пипеткой, кликнув по которой, вы можете добавить эти новости в Избранное.

pic

Читать RSS можно также на специализированных веб-сайтах, чаще всего информационных порталах, собирающих заголовки новостей из нескольких изданий. Примером такого сайта служат FreshNews http://www.freshnews.org/ или Daily Rotation http://www.dailyrotation.com/ Это первый очевидный плюс стандартного формата. Действительно, для опытного web-мастера адаптация некоего кода для своих потребностей не составляет проблемы.

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

FeedReader, www.feedreader.com Открытый проект FeedReader, поддерживаемый группой энтузиастов, занимает чуть более 2 МВ дискового пространства и предоставляет пользователю возможность читать RSS-ленты. При закрытии рабочего окна программа прячется в System Tray и, если не отключаться от Интернета, сама периодически обновляет заголовки. Новости, снабженные ссылкой(элемент <link> внутри элемента <item>), заканчиваются фразой «Read on», при переходе на которую внедренный браузер откроет указанную страницу.

WildGrape NewsDesk, www.wildgrape.net/ Программа NewsDesk от компании WildGrape радует обширной библиотекой, в которую входят десятки готовых RSS-лент. К сожалению, большинство из них англоязычны, однако тех, кто именно этого и искал, NewsDesk избавит от длительных поисков интересных RSS-ресурсов в Интернете. Удобен в работе и интерфейс приложения: один щелчок на ссылке даст краткое описание статьи (элемент <description> внутри элемента <item>), а двойной — откроет полный вариант новости. На жестком диске программа занимает около 10 MB.

Syndirella, www.yole.ru/projects/syndirella/ Программа Syndirella создана и сопровождается питерским программистом Дмитрием Жемеровым. Из всех рассмотренных утилит для чтения RSS-лент она является одной из наиболее миниатюрных, занимая на диске около 700 КВ. Если пользоваться Syndirella в течение долгого времени, то объем информации на диске будет расти благодаря архивации старых лент. По умолчанию на диске хранятся 50 последних заголовков, однако эти параметры можно изменить.

Beaver. Удобный интерфейс приложения Beaver придется по душе тем, кому интересно не возиться с настройками, а сразу же приступить к чтению RSS-ресурсов. Beaver не содержит ни библиотеки готовых лент, ни возможностей OPML-импорта. Три кнопки интерфейса — Подписаться, Обновить, Отписаться — упрощают выбор опций. Программе принадлежит рекорд по миниатюрности — менее 500 KB дискового пространства.

HotSheet, www.johnmunsch.com/projects/HotSheet/ HotSheet является единственным приложением, рассмотренным в этом материале, которое написано на Java. Программа работает под Windows, Mac OS, AIX, Solaris и Linux, требуя для своего запуска лишь Java Runtime Environment. Помимо кросс-платформенности, персональная разработка Джона Мюнша никакими другими плюсами похвастаться не способна. Все новости представлены на одной странице, которая бывает весьма длинной. Процесс добавления новых лент трудностей не вызывает, однако отсортировать полученные заголовки для более удобного просмотра можно только в пределах все той же одной страницы. Радуют лишь быстрая инсталляция программы и ее относительно высокая скорость работы после нескольких сеансов.

FeedExpress, www.cramon.dk/feedexpress.asp Датскую разработку FeedExpress вряд ли назовешь миниатюрной, так как она занимает более 8 МВ дискового пространства. При отсутствии библиотеки лент и архива новостей подобный размер оправдать трудно. В окне браузера показывается только краткое описание материала (элемент <description>), при двойном щелчке на заголовке программа запускает новое окно с полным текстом статьи. Учитывая минимализм других рассмотренных в этой статье приложений, также удивляют и весьма крупные кнопки интерфейса, тем более что настройка их размера не предусмотрена.

Я же лично по совету друзей с арбузного форума установил программу Abilon (http://www.abilon.org). По некоторым отзывам — один из лучших, если не лучший RSS-агрегатор.
Обладая всего 500 кб дистрибутивом, эта программа является быстрой, функциональной и бесплатной.

Основные возможности программы:

  • обновление по расписанию
  • возможность делать заметки и сохранять понравившиеся куски
  • поддерживает RSS 0.91, RSS 1.0, RSS 2.0, ATOM 0.3, OPML
  • встроенный браузер
  • поддержка блогов
  • Удобное конфигурирование столбцов и колонок.

При установке программа попросит выбрать, какие из огромного числа предустановленных новостных лент вас интересуют. После можно добавить любые выбранные. Если ваша работа связана с обработкой большого числа новостей из Сети, то эта программа как раз то, что надо.

pic

Часть 3. Транслировать RSS-ленту

Как только чуть освоился с RSS-технологией, сразу же захотелось научиться транслировать новости с других сайтов на своем сайте. После многочисленных поисков по форумам и складам скриптов остановился на скрипте, присланным Азимом Хикматовым, известным в Узнете как Flake. После некоторой отладки скрипт заработал и на Арбузе в центральной колонке появились новости с «Компьюленты» и научно-популярных «Элементов». Для возможности вывода нескольких разных лент с разными параметрами пришлось скрипт, написанный на языке PHP, кардинально переделать, за что спасибо Игорю Бронникову (известному под ником Ne0D1n). Он же предложил выводить только заголовки новостей, а содержание поместить в параметр title ссылки — и оно появляется при наведении на заголовок курсора мыши. Теперь нет проблем с обновлением главной страницы – это происходит автоматически, регулярно появляются интересные новости. Опять же проблема – Internet Explorer (который все ругают почем зря), Opera и Netscape отображают содержание корректно – в прямоугольном окошке. А наш любимый Firefox показывает информацию одной длиннющей строкой, которую, конечно, неудобно читать.

pic

Во время отладки пришлось решать разные вопросы – выбрать количество транслируемых заголовков и количество источников так, чтобы страница имела вразумительные размеры, выбрать количество символов во всплывающем окошке, чтобы текст был не слишком маленьким, но и не слишком большим одновременно. Еще оказалось, что некоторые источники добавляют новости не сверху файла, а снизу, пришлось вводить в скрипт специальный признак направления чтения файла. Странно – разработали концепцию отделения содержания от представления текста, создали язык, выработали стандарт RSS, а о такой мелочи не договорились.

Еще трудность, подстерегающая желающих транслировать у себя новости, – известная болезнь Рунета, Узнета и прочих Нетов — несовпадение кодировок. При попытке транслировать новости, созданные, например, в KOI-8R на сайт, выложенный в CP-1251, увидим нечитаемые символы. При необходимости такой трансляции придется делать анализатор кодировки и перекодировщик в нужную кодировку. На PHP есть стандартные подпрограммы, все сводится к поиску их и отладке. Мне же пока повезло – у источников та же кодировка, что и у моего сайта.

Orphus system