Первые две строки (листинг 3.1) — служебные. В одной описывается стандарт XML, во второй — стандарт RSS, используемые для создания фида. Кроме того, в описании версии RSS указаны источники пространства имен, применяемые в данном стандарте. Больше в фиде никакой служебной информации нет, все остальное относится непосредственно к рассылке.
В стандарте 2.0 (именно этот формат используется на Яндексе) вся рассылка обрамляется тегом <channel>, а сами новости вложены внутрь этого тега. (В версии 1.0 новости не входят в состав тега <channel>.)
Листинг 3.2. Основная часть фида по версии 2.0:_|
<channel>
<title>Яндекс. Новости: MHTepHeT</title>
<link>http://news.yandex.ru/Russia/internet.html</link>
<description>Первая в России служба автоматической обработки и систематизации новостей. Сообщения ведущих российских и мировых СМИ. Обновление в режиме реального времени 24 часа в сутки.</description>
В описании фида (рассылки) — три обязательных параметра (листинг 3.2):
□ title — название канала либо название ресурса. По нему будут ссылаться на ресурс;
□ link — ссылка на источник, соответствующий данному каналу;
□ description — краткое описание канала.
Кроме обязательных, в состав описания могут входить и необязательные элементы. К ним относятся:
□ Language — язык, на котором вы пишете свои новости;
□ copyright — авторские права, ваши, но — на английском;
□ managingEditor — электронный адрес издателя;
□ webMaster — электронный адрес веб-мастера;
□ pubDate — дата публикации. Требование к формату описано в RFC 822;
□ generator — может использоваться, если канал формируется с помощью какой-либо программ;
□ image — описывает картинку, которая может показываться агрегаторами для данного канала. Формат изображения — GIF, JPEG или PNG. В свою очередь состоит также из нескольких тегов, описывающих ссылку на картинку, ее описание и некоторые иные параметры;
□ skipHours и skipDays предназначены для агрегаторов. В этих тегах указывается, в какое время и какие дни "появление" агрегаторов нежелательно.
Есть еще ряд тегов, которые могут использоваться в описании заголовка канала, но они применяются довольно редко, и поэтому о них лучше прочитать в описании стандарта.
Следующий блок канала — сами сообщения. Каждое сообщение обрамляется элементом item. Все остальные элементы, относящиеся к новости, содержатся внутри него. Элементов item в вашем фиде будет столько, сколько новостей вы будете в нем размещать. Все элементы, входящие в item, являются необязательными, тем не менее, желательно, чтобы присутствовал хотя бы один элемент title или description. Итак, какие элементы могут включаться в описание новости?
Как только что говорилось, в состав описания новости могут включаться элементы:
□ title — заголовок записи;
□ link — ссылка на запись;
□ Description — аннотация либо полная публикация;
□ category — описывает категорию, к которой можно отнести новость;
□ pubDate — дата публикации документа. Может содержать будущую дату, по отношению к текущей. В этом случае агрегаторы должны такую новость пропускать.
Есть еще ряд элементов, которые могут входить в описание новости, но на них мы останавливаться не будем. Зато посмотрим, как все, что было описано ранее, выглядит в реальном фиде, точнее, его небольшой части (листинг 3.3).
Листинг 3.3. Пример RSS-фида Яндекс. Новостей_|
<?xml version="1.0" encoding="windows-1251"?>
<rss xmlns: yandex="http://news.yandex.ru" version="2.0">
<channel>
<title>Яндекс. Новости: Интернет</title>
<link>http://news.yandex.ru/Russia/internet.html</link>
<description>Первая в России служба автоматической обработки и систематизации новостей. Сообщения ведущих российских и мировых СМИ. Обновление в режиме реального времени 24 часа в сутки.</description>
<image>
<url>http://company.yandex.ru/i/50x23.gif</url>
<link>http://news.yandex.ru</link>
<title>Яндекс. Новости</title>
</image>
<lastBuildDate>Tue, 20 Feb 2007 23:25:00 +0300</lastBuildDate>
<item>
<title>Компенсация за порно — $5 млн</title>
<link>http://news.yandex.ru/yandsearch?cl4url=bybanner.com/article/4181.ht
ml&country=Russia</link>
<description>Именно столько требует в суде от компании IBM бывший сотрудник, уволенный в 2003 году за посещение порночатов.<br>58-летний Джеймс Пьяченца (James Pacenza) из города Монтгомери утверждает, что увлечение порно помогало ему справиться с тяжелым стрессом, вызванным гибелью на его глазах… <br></description>
<pubDate>Tue, 20 Feb 2007 17:30:17 +0300</pubDate>
<guid>http://news.yandex.ru/yandsearch?cl4url=bybanner.com/article/4181.ht
ml&country=Russia</guid>
</item>
</channel>
</rss>
Как видите, ничего особенно сложного в этом нет. Если вы делаете RSS-файл вручную, вам остается добавлять в него очередные новости, удаляя, по мере необходимости, старые. Добавлять новости лучше в начало файла, тогда это действительно будет похоже на ленту новостей, в которой свежие новости постепенно вытесняют старые.
Но новости, а тем более — новостные каналы, пишутся в первую очередь для посетителей (и почитателей) вашего проекта. Следовательно, нужно дать им возможность подписаться на ваши новости, для чего на странице новостей (хотя можно и на другой — главное, чтобы было заметно) нужно разместить специальные кнопки, но могут быть и прямые ссылки на фиды. При этом в качестве протокола чаще всего используется специально разработанный протокол — FEED.
Почему не используется обычный HTTP-протокол? На это есть две причины: протокол HTTP не может определять действия, а также не умеет запускать через ваш браузер программу-агрегатор для осуществления подписки. Поэтому протокол FEDD вызывается поверх иных сетевых протоколов — HTTP, FTP и ссылок на локальные файлы.
Примеры записи протокола FEED:
feed://http://example.org/rss.xml
feed: http://example.org/rss.xml
feed: example.org/rss.xml
feed://ftp://user: [email protected]/path/index.xml
feed://file://\servershareindex.xml
Но можно не ограничиться размещением кнопки или меню на своем сайте. Вы можете включить свою рассылку в список, формируемый некоторыми специальными проектами — службами синдикации. Одной из таких наиболее известных в России служб является проект Яндекс. Лента.
3.3.3. Яндекс. Лента как RSS-синдикатор
Новости, которые публикуются на Яндексе, поставляются сайтами в RSS-формате. Можно пройти на сайт любого информационного партнера Яндекса и найти на нем RSS-ленту, которую он предлагает для экспорта. Например, издание "Главные новости Ульяновска" (http://mosaica.ru) предлагает свою ленту на странице http://www.mosaica.ru/feed/. Эта лента экспортируется и Яндексом, и новости, публикуемые в ней, попадают в общую ленту Яндекс. Новостей. Аналогичным образом поступают и другие поставщики новостей.
Полученные новости "достаются" из RSS-файла, сортируются по различным тематическим разделам, добавляются в разделы региональные, и каждая становится частью нового фида соответствующей тематики. Для удобства сортировки поставщики информации указывают в описании новостей раздел, наиболее близкий по тематике какому-либо разделу Яндекс. Новостей.
И вот какое происходит преобразование (листинги 3.4 и 3.5).
Листинг 3.4. Новость в RSS-фиде Ульяновского издания
<item>
<link>http://mosaica.ru/news/society/8574/</link>
<title^ Ульяновской области серьезно взялись за пожарную безопасность территорий</title>
<description>21 февраля на базе Ульяновского государственного университета под председательством губернатора Сергея Морозова состоялось совещание, посвященное подведению итогов деятельности областной подсистемы предупреждения и ликвидации чрезвычайных ситуаций в регионе за 2006 год. </description>
<pubDate>Wed, 21 Feb 2007 14:49:00 +0300</pubDate>
<guid>http://mosaica.ru/news/society/8574/</guid>
</item>