Введение в Web-технологии

Примеры разработки RSS-источников и RSS-ридеров

Показывать лекцию целиком

RSS – это метод распространения веб-контента с веб-сайта на других веб-сайтах. RSS позволяет выполнять быстрый просмотр новостей и изменений.

На кого ориентирован формат RSS? В первую очередь RSS предназначен для использования на очень часто обновляемых веб-сайтах, например:

  • Новостные сайты (списки новостей).
  • Сайты компаний (списки новостей и продуктов).
  • Календари (списки предстоящих событий и знаменательных дней).
  • Изменения сайтов (список обновленных и новых страниц).
  • Официального стандарта RSS как такового не существует. Реально используются следующие форматы:

  • Порядка 50% RSS-потоков используют RSS 0.91.
  • Порядка 25% используют RSS 1.0.
  • Оставшиеся 25% RSS-потоков распределены между RSS 0.9 и RSS 2.0.
  • Как работает RSS?

  • Создается RSS документ в виде файла с расширением .xml.
  • Этот файл размещается на веб-сайте.
  • RSS-поток регистрируется в RSS-аггрегаторах.
  • Пример RSS документа

    <?xml version="1.0" encoding="windows-1251" ?>
    <rss version="2.0">
    <channel>
      <title>My Home Page</title>
      <link>http://www.MyHP.edu</link>
      <description>Free web building tutorials</description>
      <item>
        <title>RSS Demo</title>
        <link>http:// www.MyHP.edu/rss</link>
        <description>New RSS demo on my home page</description>
      </item>
      <item>
        <title>XML Demo</title>
        <link> www.MyHP.edu/xml</link>
        <description>New XML demo on my home page</description>
      </item>
    </channel>
    </rss>

    В первой строке размещено объявление версии XML и кодировки документа.

    Вторая строка идентифицирует данный документ как RSS документ версии 2.0.

    В третьей строке содержится элемент <channel>, описывающий RSS поток. Он в свою очередь содержит дочерние элементы:

  • <title> - описывает заголовок RSS канала.
  • <link> - описывает гиперссылку на канал.
  • <description> - содержит краткую характеристику канала.
  • Каждый элемент <channel> может содержать один или более <item> элементов. Каждый элемент <item> описывает отдельную статью RSS источника. В свою очередь каждый элемент <item> имеет три обязательных дочерних элемента:

  • <title>
  • <link>
  • <description>
  • Кроме обязательных элементов <channel> может содержать некоторые дополнительные дочерние элементы.

  • Элемент <category> описывает категорию потока и используется RSS аггрегаторами для группировки сайтов на основе категорий.
  • Элемент <copyright> информирует об авторском праве на данный документ.
  • Элемент <image> предназначен для отображения изображения при показе потока агрегатором. В свою очередь он содержит три обязательных дочерних элемента:
  • <url> - URL изображения
  • <title> - альтернативный текст, отображаемый при невозможности показа изображения
  • <link> - содержит гиперссылку на веб-сайт, содержащий канал
  • Пример:

    <image>
      <url>http://www.myhp.edu/images/me.gif</url>
      <title>My home page</title>
      <link>http://www.myhp.edu</link>
    </image>

    Элемент <language> информирует о языке документа. Может быть использован аггрегаторами для группировки сайтов по языку.

    Список дочерних элементов для элемента <channel>.

    Элемент Описание Статус
    <category> Указывается одна или несколько категорий потока Необязательный
    <cloud> Регистрирует процессы, получающие немедленное извещение в случае обновления потока Необязательный
    <copyright> Извещает об авторском праве на документ Необязательный
    <description> Краткое описание канала Обязательный
    <docs> Указывает URL документов по форматам, используемым в потоке Необязательный
    <generator> Указывает на программу, генерирующую поток Необязательный
    <image> Позволяет показывать изображение, представляющее поток в аггрегаторе Необязательный
    <language> Указывается язык потока Необязательный
    <lastBuildDate> Определяется дата последнего обновления содержимого потока Необязательный
    <link> Указывается гиперссылка на канал Обязательный
    <managingEditor> Содержится почтовый адрес редактора содержимого потока Необязательный
    <pubDate> Определяет дату последней публикации содержимого потока Необязательный
    <rating> Содержится PICS рейтинг потока Необязательный
    <skipDays> Указывает дни, в которые аггрегаторы не должны обновлять поток. Необязательный
    <skipHours> Указывается количество часов в течение которых аггрегаторы не должны обновлять поток Необязательный
    <textInput> Описывается текстовое поле ввода, отображаемой в потоке Необязательный
    <title> Размещается имя канала Обязательный
    <ttl> Указывается количество минут в течение которых поток может находится в кэше до обновления из источника Необязательный
    <webMaster> Помещается адрес электронной почты веб-дизайнера потока Необязательный

    Список дочерних элементов для элемента < item >

    Элемент Описание Статус
    <author> Адрес электронной почты автора темы Необязательный
    <category> Описывает одну или более категорий для данной темы Необязательный
    <comments> Позволяет связать тему с комментариями по данной теме Необязательный
    <description> Краткое описание темы Обязательный
    <enclosure> Позволяет включить мультимедиа файл в данную тему Необязательный
    <guid> Содержит уникальный идентификатор темы Необязательный
    <link> Содержит гиперссылку на тему Обязательный
    <pubDate> Содержит последнюю дату публикации темы Необязательный
    <source> Указывает внешний источник для данной темы Необязательный
    <title> Название темы Обязательный

    Публикация RSS файла

    Создание RSS потока не ограничивается разработкой RSS документа. Необходимо еще опубликовать этот файл. Для этого потребуется выполнить следующую последовательность действий:

  • Выбрать подходящее название для RSS файла. Расширение должно быть .xml.
  • Проверить RSS файл на правильность с помощью подходящей программы-валидатора, например, взятой по адресу http://www.feedvalidator.org.
  • Разместить RSS файл в подходящем веб-каталоге веб-сервера.
  • Скопировать одну из "кнопок":илив веб-каталог.
  • Вставить выбранную "кнопку" на исходящую страницу RSS потока в виде гиперссылки на RSS файл, например:
    <a href = "www.myhp.edu/rss/myrss.xml">
    < img src="http://www.myhp.edu/rss/rss.gif" width="35" height="15">
    </a>
  • Разместить созданный RSS поток в популярных Каталогах RSS потоков, при этом URL потока должен ссылаться именно на сам XML файл потока, т.е. http://www.myhp.edu/rss/myrss.xml.
  • Можно также зарегистрировать поток в популярных поисковых системах, например:
  • Yahoo - http://publisher.yahoo.com/rss_guide/submit.php
  • Google - http://www.google.com/ig
  • MSN - http://w.moreover.com/site/products/ind/pingserver.html
  • Периодическое обновление потока.
  • В принципе, можно самостоятельно заниматься формированием данных в соответствующем формате RSS для работы потока. Однако имеются достаточно удобные высокоуровневые средства для автоматизации данной работы. Например:

  • .
  • Для чтения RSS потоков используются специальные программы чтения – RSS ридеры. Некоторые из браузеров имеют встроенные RSS ридеры. В частности, веб-браузер MS Internet Explorer 7 может интерпретировать XML файлы RSS потоков и корректно их отображать.

    Добавление RSS-канала с помощью Microsoft Internet Explorer версии 7

    При использовании MS Internet Explorer версии 7 и Office Outlook 2007 можно добавлять и просматривать RSS-каналы с помощью любой из этих программ.

  • При просмотре веб-страницы, содержащей RSS, в ( .
  • Нажмите кнопку.
  • На веб-странице отобразится список доступных RSS-каналов.
  • Выберите RSS-канал, который необходимо добавить.
  • Можно также нажать кнопки,или, расположенные на веб-странице.

    Порядок выполнения лабораторной работы

    1. Cоздания RSS документа с помощью PHP сценария и с использованием интерфейса DOM XML.

  • Подготовьте файл, содержащий сценарий на языке PHP:
    <?php
    // Создается новый XML документ.
    $dfeed = new DOMDocument('1.0', 'utf-8');
    
    // Создание корневого элемента  <rss>
    $erss = $dfeed->createElement('rss');
    $erss->setAttribute('version', '2.0');
    
    //  И добавление его в дерево документа
    $dfeed->appendChild($erss);
    
    // Создание элемента <channel> и добавление его к <rss>
    $echannel = $dfeed->createElement('channel');
    $erss->appendChild($echannel);
    
    // Создание и добавление в channel 
    // узлов <title>, <link>, <description>, <language>, <pubDate> 
    $echannel->appendChild( $dfeed->createElement('title', 'RSS-channel title') );
    $echannel->appendChild( $dfeed ->createElement('link', 'http://www.myhp.edu') );
    $echannel->appendChild( $dfeed ->createElement('description', 'my RSS demo') );
    $echannel->appendChild( $dfeed ->createElement('language', 'en') );
    $echannel->appendChild( $dfeed ->createElement('pubDate', date('r')) );
    
    // Добавление к узлу <channel> 2 узлов <item>
    for ( $i = 1; $i <= 2; $i++ ) 
    {
        $eitem = $dfeed->createElement('item');
        $echannel->appendChild($eitem);
    
        // Создание дочерних элементов для <item>
        $eitem->appendChild( $dfeed->createElement('title', 'Item'.$i) );
        $eitem->appendChild( $dfeed->createElement('link', 'http://www.myhp.edu/rss/'.$i.'.xml') );
        $eitem->appendChild( $dfeed->createElement('description', 'Description for '.$i.' item') );
    }
    
    // Сохранение документа в файле demo.rss
    $dfeed->save('demo.rss');
    ?>
  • Созданный файл разместите на веб-сервере, настройте права доступа (право на запись) для веб-сервера к директории, в которой размещается сценарий, либо к специальной директории, в которой будет создан файл demo.rss (это более безопасно).
  • Выполните сценарий по запросу с веб-браузера.
  • В результате выполнения сценария получится следующий документ:

    В результате выполнения сценария получится следующий документ:

    <?xml version="1.0" encoding="utf-8" ?> 
    <rss version="2.0">
     <channel>
      <title>RSS-channel title</title> 
      <link>http://www.myhp.edu</link> 
      <description>my RSS demo</description> 
      <language>en</language> 
      <pubDate>Thu, 06 Nov 2008 01:50:53 +0300</pubDate> 
    <item>
      <title>Item1</title> 
      <link>http://www.myhp.edu/rss/1.xml</link> 
      <description>Description for 1 item</description> 
      </item>
     <item>
      <title>Item2</title> 
      <link>http://www.myhp.edu/rss/2.xml</link> 
      <description>Description for 2 item</description> 
      </item>
      </channel>
      </rss>
  • 2.Чтение RSS документа с помощью PHP сценария и с использованием интерфейса DOM XML.

  • Подготовьте файл, содержащий сценарий на языке PHP:
    <?php
    // Загрузка документа
    $dfeed = DOMDocument::load('demo.rss');
    
    // Чтение элемента <channel>
    $echannel = $dfeed->firstChild->firstChild;
    
    // Чтение первого дочернего элемента узла <channel> т.е.< title>
    $cchild = $echannel->firstChild;
    
    // Вывод содержимого дочерних элементов узла <channel> до элемента <item>:
    
    print "<strong><br>";
    while ( $cchild->tagName != 'item' ) 
    {
        print $cchild->nodeValue. "<br>";
        $cchild = $cchild->nextSibling;
    }
    print "</strong><br>";
    
    // Получение списка узлов <item>
    $litems = $echannel->getElementsByTagName('item');
    
    print "<br>";
    foreach ( $litems as $eitem ) 
    {
    	$title = $eitem->firstChild->nodeValue;
    	$link = $eitem->firstChild->nextSibling->nodeValue;
    	$descr = $eitem->lastChild->nodeValue;
    
    print "<a href=".$link.">".$title."</a> :: ".$descr."<br>";
    }
    print "<br>";
    
    ?>

    В методе load() в качестве параметра укажите путь к RSS-файлу.

  • Созданный файл разместите на веб-сервере, настройте права доступа (право на запись) для веб-сервера к директории, в которой размещается сценарий, либо к специальной директории, в которой будет создан файл demo.rss (это более безопасно).
  • Выполните сценарий по запросу с веб-браузера.
  • Результат должен выглядеть следующим образом:
  • Контрольное задание

    Разработайте PHP-сценарий, генерирующий RSS документ, содержащий описание веб-страниц на вашем локальном веб-сайте. В качестве источника информации для сценария можно использовать либо заранее подготовленный текстовый файл, либо функции PHP из библиотеки для работы с файловой системой (см., например: http://www.softtime.ru/bookphp/help.php)

    Вернуться к учебному плану