RSS каналы

Опубликовано: 16.10.2009
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке
Содержание
Определение

RSS - это один из форматов, используемых для передачи информации по Сети, который расшифровывается "Really Simple Syndication" или "Очень Простое Синдицирование (распространение по подписке)".

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

На сайтах новостные ленты обычно обозначаются оранжевым значком с тремя белыми дугами.

Структура RSS-файла
Обязательная структура RSS

RSS-файл представляет из себя документ в формате XML, которые соответствует спецификации XML 1.0, опубликованной на веб-сайте консорциума WWW (W3C).

Итак обязательная структура RSS выглядит следующем образом:

<?xml version="1.0" encoding="UTF-8" ?>
	<rss version="2.0">
	   <channel>
	       <title>Название RSS-канала</title>
	       <link>http://ссылка на основной сайт</link>
	       <description>Краткое описание RSS-канала</description>
	       <item>
	           <title>Название новости</title>
	           <link>http://ссылка на полную версию новости</link>
	           <description>Краткая версия новости.</description>
	       </item>
	   </channel>
	</rss>

Тег<xml>указывает в какой версии XML и в какой кодировке написан документ. Далее следует тег<rss>, в котором указывается версия RSS-спецификации (существует несколько версий RSS-спецификаций от разных разработчиков, поэтому агрегатору RSS-канала нужно указать в каком формате изложен документ, в этой статье будет разобрана только версия 2.0). Тег<channel>содержит в себе информацию о самом канале: здесь указываются название канала, ссылка на сайт, откуда загружен канал, описание канала и список новостей, заключенных в теги<item>.

Элементы тега <channel>

Как уже было сказано выше, тег<channel>является обязательным для RSS-файла. Этот тег является дочерним по отношению к основному тегу канала<rss>и может содерджать следующие элементы:

  • <title>- название RSS-канала.
  • <link>- ссылка на основной сайт (ссылка обязательно должна начинаться с http://, https:// ftp:// или mailto:).
  • <description>- краткое описание RSS-канала.
  • <language>- язык, на котором написан канал (для обозначения языков используюся аббревиатуры, определенные W3C).
  • <copyright>- информация об авторском праве на канал.
  • <managingEditor>- адрес электронной почты редактора содержимого канала.
  • <webMaster>- адрес электронной почты веб-мастера канала.
  • <pubDate>- дата публикации содержимого канала (дата и время должны соответствовать спецификации RFC 822).
  • <lastBuildDate>- дата последнего изменения содержимого канала (дата и время должны соответствовать спецификации RFC 822).
  • <category>- категория, к которой относится канал.
  • <generator>- программа, в которой сгенерирован файл канала.
  • <docs>- ссылка на документацию об использованном формате канала.
  • <cloud>- ссылка на веб-сервис, поддерживающий интерфейс rssCloud.
  • <ttl>- время жизни в минутах, на которые канал может кешироваться.
  • <image>- изображение GIF, JPEG или PNG, которое может отображаться с каналом (тег должен содердать атрибуты<url>, в котором указывается ссылка на картинку,<title>, в котором указывается пояснение к картинке, и<link>, который содержит ссылку для перехода по картинке, так же могут быть заданы параметры<width>и<height>).
  • <rating>- рейтинг канала.
  • <textInput>- поле текстового ввода, которое может отображаться с каналом.
  • <skipHours>- информация агрегаторам, в какие часы можно не обрабатывать канал.
  • <skipDays>- информация агрегаторам, в какие дни можно не обрабатывать канал.
Элементы тега <item>

Тег<item>является дочерним по отношению к тегу<channel>. Канал может содержать любое количество статей, то есть любое количество элементов<item>. Обязательные элементы тега указаны в приведенном выше примере, а ниже перечислены все возможные параметры, которые можно использовать для новостей:

  • <title>- название новости.
  • <link>- ссылка на полную версию новости.
  • <description>- краткая версия новости.
  • <author>- адрес электронной почты автора сообщения.
  • <category>- категория сообщения.
  • <comments>- ссылка на страницу комментариев.
  • <enclosure>- медиа-объект, прикрепленный к сообщению (тег должен содердать атрибуты<url>, в котором указывается ссылка на прикрепленный файл,<length>, в котором указывается размер вложения в байтах, и<type>, который описывает тип вложения).
  • <guid>- уникальный идентификатор сообщения.
  • <pubDate>- дата публикации сообщения (дата и время должны соответствовать спецификации RFC822, если дата относится к будущему, то агрегатор не показывает сообщение, пока не наступит указанное время).
  • <source>- RSS-канал, из которого получено сообщение (тег должен содержать атрибут<url>, в котором указывается ссылка на RSS-источник.)
Автоматическая генерация RSS-канала для сайта
Размещение канала на сайте

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

RSS-channels web-page

Например, на моем сайте новости располагаются на главной странице под списком разделов.

Блок новостей представляет из себя динамический элемент, который считывает из базы данных новостей последнюю публикацию и выводит ее на страницу. Блок содержит следующие элементы:

  • значек RSS, который ссылается на ленту новостей;
  • дату последней публикации;
  • текст последней публикации;
  • ссылку на статью, связанную с публикацией;

Если обратить внимание на значек RSS, то можно увидеть, что он связан с лентой новостей - страницей rss.aspx. Эта страница и является полноценным каналом новостей, который может использоваться агрегаторами для обработки публикаций.

Итак, чтобы создать RSS-канал на ASP.NET нам потребуется:

  • база данных, в которой будут содержаться новости;
  • шаблон страницы на ASP.NET;
  • код, генерирующий содержимое страницы ASP.NET;
База данных новостей

Для того, чтобы хранить новости, нам потребуется создать базу данных. Создать базу данных можно на любой платформе, я же буду использовать самый простой вариант - файл mdb.

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

Итак, таблица новостей должна содержать следующие поля:

  • news_id - идентификатор публикации (числовой);
  • news_date - дата публикации (дата и время);
  • news_title - заголовок новости (строковый);
  • news_description - содержание публикации (тектовый);
  • news_link - ссылка на основную статью (строковый).
RSS-channels table

При необходимости таблица может быть дополнена другими полями.

Шаблон страницы канала новостей

Файл канала новостей будет иметь имя rss.aspx и состоять только из одной строки:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="rss.aspx.vb" Inherits="rssClass" %>
Код, генерирующий содержимое канала новостей

Код, который генерирует, что будет содержать лента новостей, располагается в файле rss.aspx.vb и представляет из себя считыватель базы данных с генератором XML структуры.

Partial Class rssClass
   Inherits System.Web.UI.Page
   ' Подключение библиотек
   Private mBaseClass As New MyLibrary.BaseClass
   Private mDatabaseClass As New MyLibrary.DatabaseClass

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
     Handles Me.Load
       Dim mRSSContent As New StringBuilder
       Dim mTempTable As New Data.DataTable("RSSContent")
       mTempTable = mDatabaseClass.GetTable_SQL("Microsoft Access Driver (*.mdb)", _
         Nothing, Request.PhysicalApplicationPath & "App_Data\dynamic.mdb", _
         Nothing, Nothing, _
         "SELECT * FROM news ORDER BY news_id DESC")
       mRSSContent.AppendLine("<?xml version=""1.0"" encoding=""UTF-8"" ?>")
       mRSSContent.AppendLine("<rss version=""2.0"">")
       mRSSContent.AppendLine("<channel>")
       mRSSContent.AppendLine("<title>Новости сайта it-bor.qsh.eu</title>")
       mRSSContent.AppendLine("<link></link>")
       mRSSContent.AppendLine("<description>Новости сайта it-bor.qsh.eu</description>")
       If Not (mTempTable Is Nothing) Then
           For iCounter As Integer = 0 To mTempTable.Rows.Count - 1
               mRSSContent.AppendLine("<item>")
               mRSSContent.AppendLine("<title>" & _
                 mTempTable.Rows(iCounter).Item("news_title").ToString & "</title>")
               mRSSContent.AppendLine("<link>" & _
                 mTempTable.Rows(iCounter).Item("news_link").ToString & "</link>")
               mRSSContent.AppendLine("<description>" & _
                 mTempTable.Rows(iCounter).Item("news_description").ToString & _
                 "</description>")
               mRSSContent.AppendLine("<pubDate>" & _
                 Format(CDate(mTempTable.Rows(iCounter).Item("news_date").ToString), _
                 "r") & "</pubDate>")
               mRSSContent.AppendLine("</item>")
           Next
       End If
       mRSSContent.AppendLine("</channel>")
       mRSSContent.AppendLine("</rss>")
       Response.Write(mRSSContent.ToString)
   End Sub
End Class

Разберем, что делает данная программа:

  1. При загрузке страницы вызывается процедура составления канала.
  2. Вызывается внешняя процедура чтения базы данных новостей.
  3. Составляется начальная структура канала (обязательные блоки).
  4. Для каждой новости из базы данных вставляется тег<item>и заполняются его атрибуты.
  5. Сгенерированная структура и содержание канала вставляется в шаблон страницы в виде ответа на запрос браузера (агрегатора).
Примечание. Для считывания базы данных используется внешняя библиотека, которая не входит в содержание данной статьи.
Заключение

В заключение назовем те преимущества, которыми обладают RSS-каналы:

  • RSS - это почтальон, ежедневно доставляющий свежую прессу в ваш почтовый ящик.
  • Минимум трафика - загружаются только заголовки и дайджест публикации.
  • Экономия времени - не нужно посещать сайт, чтобы узнать об обновлениях страницы.
  • Простота использования - достаточно добавить RSS-канал в веб-браузер или специальную программу, и вы уже получаете новости.
Виталий Бочкарев