Создание RSSB канала

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

Со своей стороны, мы можем предложить несколько путей создания RSSB каналов:

  • генерацию канала "на лету"(on-the-fly)
    по каждому запросу посетителя (в режиме реального времени), скрипт формирует XML файл в формате RSSB, который передается клиенту.
  • обработчик с предварительной генерацией канала
    Обработчик генерирует по расписанию файл XML в формате RSSB, который передается Web-сервером посетителю как статическая страница HTML.

Оба способа являются тривиальными, в них нет ничего сложного для web-мастера знакомого с XML. Прежде всего, не забудьте указать MIME формат Web-Серверу для rss-файлов как "text/xml".

Unix/Apache: Генерация RSSB канала скриптом

Самым подходящим решением было бы создание скрипта на языке PHP или Perl. Для реализации этого варианта необходимо настроить Web-сервер для исполнения файлов c расширением rss. Аналогично тому, как это сделано для cgi.

Аналогично составлению HTML-страницы каталога Вашего сайта, сначала Вы анализируете и выгружаете необходимые данные из базы. Затем накладываете полученные данные поверх RSSB формата. То есть подменяете во всех необходимых поля канала (title, description, pubDate, link и т.д.) текст на информацию, выгруженную из базы. Информация о бизнес-единицах, должна быть вложена в поля item, повторение элементов item в RSSB канале может быть неограниченно. При этом нужно соблюдать декларированные в RSSB формате поля (bfs:Price, bfs:Action и т.д.) описанные в спецификации. Для простоты можно воспользоваться шаблоном, представленным в виде примера валидного RSSB канала, приведенного ниже. Его можно использовать как шаблон.

Для корректного создания RSSB канала, нужно соблюдать правила, указанные в спецификации стандарта. Созданный сценарий будет исполняться по запросу посетителя и форматировать RSSB канал "на лету"(on-the-fly). Чтобы избежать излишней нагрузки на сервер, можно включить кэширование.

Unix/Perl: Генерация RSSB канала обработчиком

Для этой задачи, наверное, будет удобен скрипт на языке Perl.

Назначение обработчика состоит в том, что бы сформировать файл XML и выложить его в указанное место на Web-сервере. Сначала Вы анализируете и выгружаете необходимые данные из базы - аналогично составлению страниц Вашего каталога/сайта. Затем накладываете полученные данные поверх шаблона RSSB формата - прописываете необходимые поля канала (title, description, pubDate, link и т.д.), после чего в цикле выгружаете информацию о бизнес-единицах в поле item и добавляете дочерние поля, установленные в спецификации RSSB формата (bfs:Price, bfs:Action и пр.). Не забывайте, что для корректного функционирования RSSB-канал должен соответствовать правилам, указанным в спецификации и выглядеть аналогично примеру валидного XML документа в формате RSSB.

Для обработки и выгрузки данных, созданный сценарий можно запускать по расписанию автоматически. В ttl-поле RSSB файла укажите величину периода обновления канала в минутах (периода запуска созданного обработчика).

Windows/Net: Генерация RSSB канала обработчиком

Windows и Net Framework предоставляет обширные возможности обработки XML, но, увы, это не облегчает работу по сравнению с Unix/Perl.

Для создания обработчика легче написать консольное приложение на С# или VB, использующее пространство имен System.XML, а именно - XmlDocumetn, XmlWriter. Правильнее было бы создавать XML документ с помощью класса XmlDocumetn, чем выгружать XML в сыром текстовом виде.

Допустим, что Вы успешно выгрузили информацию из базы и в соответствии со спецификацией RSSB формата получили XML файл, аналогичный примеру валидного XML документа в формате RSSB, который приведен ниже. Теперь его можно записать в rss-файл на сервере и сделать доступным для пользователей. Обработчик для форматирования и выгрузки данных запускается автоматически. Период запуска устанавливается владельцем RSSB канала в минутах - в поле ttl RSSB файла.

Windows/IIS/ASP: Генерация RSSB канала скриптом ASP

Неплохим решением может быть создание скрипта на ASP. Для этого нужно перенастроить Ваш Web-сервер для исполнения файлов c расширением rss (аналогично тому, как это делается для asp/aspx).

Сначала выгрузите из базы необходимые данные (аналогично составлению HTML-страницы каталога сайта). Затем полученные данные нужно наложить поверх RSSB-формата. Пропишите нужные поля канала (title, description, pubDate, link и т.д.), а затем в цикле выгрузите информацию о бизнес-единицах, вкладывая их в поля item (bfs:Price, bfs:Action и др., установленные спецификацией). Для простоты можно воспользоваться примером, как шаблоном валидного XML документа в формате RSSB и заменить существующие текстовые поля своей информацией, выгруженной из базы.

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

Windows/IIS/Net: Генерация RSSB канала Net классом

Действия должны быть подобны тем, которые описаны для создания обработчика или скрипта ASP. Хотя описываемый способ более сложный, он является более "правильным" (см. приведенный ниже пример).

Итак, для того, что бы Net класс перехватывал запросы к Web серверу (аналогично ISAPI фильтру) фильтровал и генерировал в ответ канал RSSB, Вам придется немного потрудиться. Самой простое решение - создание класса наследующего от IHttpHandler. Реализовать в нем методы ProcessRequest и IsReusable (см MSDN). Затем, воспользовавшись XmlTextWriter, выводить результат непосредственно HttpResponse. Пример кода на C# можно посмотреть ниже.

Затем необходимо перенастроить IIS, добавив в web.config в раздел <headers> строчку:

<add verb="*" path="*.rss" type="RSSBns.XMLHandler, RSSBns"/>

Где RSSBns – пространство имен проекта, а XMLHandler – объект, наследованный от IHttpHandler, описанный выше. Так же в настройках IIS необходимо указать, что rss файлы требуют аналогичной обработки asp.dll, как и файлы ASP и прописать MIME для rss как "text/xml".

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

Помните, что RSSB файл должен оставаться правильно сформированным (well-formed) и валидным (valid)! Для проверки корректности соответствия RSSB-формату воспользуйтесь валидатором.

Загрузка данных из RSSB канала

Для Unix/Perl загрузка RSSB-канала с чужого сервера является простой задачей. Необходимо скачать RSS-файл c сервера, затем обработать его скриптом написанным, например, на Perl, затем с помощью regex выделить необходимые данные и загрузить их в базу. Убедитесь перед этим, что в базе отсутствуют идентификатор бизнес-единицы GUID (указывается в поле guid). Это означает, что бизнес-единица, соответствующая этому GUID - уникальная. Запуск такого обработчика должен происходить по расписанию, в соответствии со значением, указанным в ttl-поле канала.

Для Windows/Net можно прибегнуть к помощи WebRequest из пространства System.Web, который поможет скачать файл rss и затем обработать его, например XmlReader. Затем выделить необходимые данные и загрузить их в базу. Убедитесь перед этим, что уникальный GUID (указывается в поле guid) отсутствует в базе, чтобы избежать дублирования бизнес единицы. Обработчик будет запускаться по расписанию в соответствии со значением периода, указанного в поле ttl RSSB канала.

Другие применения RSSB

Как еще можно использовать канал RSSB?

Во-первых, для приема / передачи бизнес информации между серверами.

Во-вторых, для online подключения к Вашему RSSB каналу пользователей, без посещения Вашего сайта с использованием агрегаторов. Все аналогично применениям стандарта RSS.

Нестандартные примеры использования RSSB

1. Бизнес-Информер - ролик написанный на Flash, загружающий указанный RSSB-файл и транслирующий его информацию, аналогично информеру или баннеру.

Подробнее о реализации и настройки Бизнес Информера можно прочесть в разделе "RSSB Информер".

2. Можно использовать XSL для обработки файла RSSB-канала и отображения его информации на страницах вашего сайта. Можно загружать RSSB файл по расписанию в доступное для посетителей сайта место. Для этого внедрите после декларации XML строчку:

<?xml-stylesheet type="text/xsl" href="rssb.xsl" version="1.0"?>

Где rssb.xsl – может быть вашим XSL файлом обработки XML. Вывести созданный скрипт на странице вашего сайта можно, например, в тегах frame или iframe.

Для Windows/Net платформы можно воспользоваться более удобной ASP компонентой xml:

<asp:Xml id=Xml1 runat="server"></asp:Xml>

В принципе, обработка XSL может преобразовать RSSB канал, как и любой XML файл тысячей своеобразных способов и представлений.

Пример RSSB файла с полным заполнением полей

<!--

  Пример RSSB файла с полным заполнением полей
  создан 23.05.2005 Alexander Ivanov BFS.RU
-->
-
 <rss version="2.0">
-
 <channel>
<title>BFS.RU Продажа бизнеса</title>
<category>Продажа готового бизнеса</category>
<link>http://www.bfs.ru/sale.asp</link>
<description>Канал продажи бизнеса</description>
-
 <image>
<url>http://www.bfs.ru/images/bfs_rss.gif</url>
<link>http://www.bfs.ru</link>
<title>Форум Готового Бизнеса</title>
</image>
<language>ru</language>
<pubDate>Sat, 21 May 2005 19:43:06 GMT</pubDate>
<lastBuildDate>Sat, 21 May 2005 19:43:06 GMT</lastBuildDate>
<generator>BFS.RU.RSSB.processor</generator>
<ttl>360</ttl>
<docs>http://www.bfs.ru/rssb/</docs>
-
 <copyright>
www.bfs.ru Форум Готового Бизнеса | Business Forum Stock 2005
</copyright>
-
 <item>
<bfs:Action actiontype="sale"/>
<bfs:Price name="Стоимость бизнеса от, $" pricetype="fixed">1600000.00</bfs:Price>
<bfs:CorpName name="Наименование компании">ОАО Специализированный трест</bfs:CorpName>
<bfs:LegalForm name="Организационно-правовая форма компании">ОАО</bfs:LegalForm>
-
 <bfs:CorpOwners name="Владельцы бизнеса (учредители)">
ООО Финансовое Агенство Милком-Инвест   
www.milcom.ru<BR>
</bfs:CorpOwners>
-
 <bfs:Assets name="Перечень активов">
к продаже предлагается 3703 акции,что составляет 41% уставного капитала общества.
</bfs:Assets>
<title>ОАО ОАО Специализированный трест</title>
-
 <bfs:Comment name="Комментарий для таблицы">
Трест Уралцветметгазочистка является единственной специализированной организацией в Уральском и Сибирском регионах в области защиты атмосферы от загрязнения вредными веществами.Трест имеет богатый опыт работы и налаженные контакты с ведущими промышленными предприятиями региона.
</bfs:Comment>
-
 <description>
Проектирование ,изготовление,строительство новых газоочистных и аспирационных установок,реконструкция,капитальный ремонт и наладка действующих на предприятиях ,черной и цветной металлургии ,строительной индустрии , энергетики и других производств.
</description>
<bfs:BusinessAge name="Срок существования бизнеса, лет">35 лет</bfs:BusinessAge>
<bfs:BusinessField name="Сфера деятельности">Производство и промышленность</bfs:BusinessField>
-
 <bfs:Product name="Продукция и услуги">
Производит:<BR>-пылегазоочистное оборудование,системы газоходов,опорных,технологических и строительных металлоконструкций,в том числе из титана и легированных сталей.Выполняет целый комплекс услуг по проектированию ,комплексной поставки,строительно-монтажные и пусконаладочные работы.авторский надзор и шефмонтаж,изготовление и поставки запасных частей.
</bfs:Product>
<bfs:Country name="Страна">Россия</bfs:Country>
<bfs:Region name="Регион (РФ)">Челябинская обл.</bfs:Region>
<bfs:City name="Город">Челябинск</bfs:City>
<bfs:Share name="Продаваемая доля, %">41%</bfs:Share>
-
 <bfs:Personnel name="Квалификация персонала">
Имеет в своем составе:<BR>-Высококвалифицированный проектно-конструкторский отдел<BR>-Мощную производственную базу<BR>-Монтажные и пусконаладочные участки
</bfs:Personnel>
<link>http://www.bfs.ru/viewrequest.asp?rqid=304</link>
<guid>545331d0-5428-4757-9b80-52074dc4ccf2</guid>
<pubDate>Fri, 13 May 2005 13:22:00 GMT</pubDate>
<author>Владимир</author>
<category>продажа бизнеса</category>
<comments>http://www.bfs.ru/viewrequest.asp?rqid=304</comments>
<source>http://www.bfs.ru/sale.rss</source>
</item>
</channel>
</rss>

Приложение 1. Пример кода на C#

//
//C# Пример построения RSSB канала  (c) BFS.RU 2005
//
using System;
using System.Web;
using System.Xml;
using System.Text;

namespace RSSBns
{
  /// <summary>
  /// Краткий пример формирования RSSB канала по 
  запросу в реальном режиме (on-the-fly).
  /// (c) BFS.RU 2005 Alexander Ivanov
  /// </summary>
  public class Example: IHttpHandler
  {
    public void ProcessRequest(HttpContext context) 
    {

      HttpRequest Request = context.Request;
      HttpResponse Response = context.Response;

      Response.ContentType="text/xml"; // MIME
      Response.ContentEncoding = Encoding.GetEncoding
      ("window-1251"); //кодировка
      Response.Cache.SetExpires(DateTime.Now.AddSeconds
      (600)); //кэширование



      //XmlTextWriter пишет в Respose
      XmlTextWriter w = new XmlTextWriter(Response.
      OutputStream,Encoding.GetEncoding("windows-1251"));
      w.Formatting = Formatting.Indented;
      w.Indentation = 4;
      w.WriteStartDocument();

      w.WriteRaw("<?xml-stylesheet type=\"text/xsl\" 
      href=\"rssb.xsl\" version=\"1.0\"?>"); //для 
      обработаки XSL 

      w.WriteStartElement("rss");
      w.WriteAttributeString("version","2.0");
      w.WriteAttributeString("xmlns","bfs",null,
      "http://www.bfs.ru/rssb/"); //указание xmlns 
      обязательно для соответвия RSSB
			
      w.WriteStartElement("channel");
      w.WriteStartElement("title");
      w.WriteString("BFS.RU Покупка бизнеса");
      w.WriteEndElement();
			
      w.WriteStartElement("category");
      w.WriteString("Покупка готового бизнеса");
      w.WriteEndElement();
			
      /*
      ..... другие поля 
      */

      w.WriteStartElement("generator");
      w.WriteString("BFS.RU.RSSB.processor");
      w.WriteEndElement();
			
      w.WriteStartElement("ttl");
      w.WriteString(Defaults.GetDefValue("ttl"));
      w.WriteEndElement();
			
      w.WriteStartElement("docs");
      w.WriteString(http://www.bfs.ru/rssb/); 
      //обязательно для соответвия RSSB
      w.WriteEndElement();
			
      w.WriteStartElement("copyright");
      w.WriteString("www.bfs.ru Форум Готового 
      Бизнеса | Business Forum Stock 2005");
      w.WriteEndElement();
			
        foreach (Item f in BuyDataItemArray)
        {
          w.WriteStartElement("item");

          w.WriteStartElement("bfs","Action",null);
	  w.WriteAttributeString("actiontype","buy"); 
          //для покупки бизнеса
	  w.WriteEndElement();

            w.WriteStartElement("bfs","City",null);
	    w.WriteAttributeString("name","Город");
	    w.WriteString("...");
	    w.WriteEndElement();

	    w.WriteStartElement("bfs","BusinessField",null);
	    w.WriteAttributeString("name","Сфера 
            деятельности");
	    w.WriteString("...");
	    w.WriteEndElement();

	    w.WriteStartElement("bfs","Country",null);
	    w.WriteAttributeString("name","Страна");
	    w.WriteString("...");
	    w.WriteEndElement();
	    /*
	    ..... другие поля 
	    */

          w.WriteEndElement();// </item>
	  }
	
        w.WriteEndElement(); // </chanel>
			
        w.WriteEndElement(); //</rss>
        w.WriteEndDocument();
        w.Close();

      }
      public bool IsReusable 
      {
        get { return false; }  
      }
    }

}

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

Спецификация Формата подготовлена 21.04.2005 BFS.RU
разработчики: Александр Иванов, Коновалов Андрей