Документация для разработчиков

RSS

RSS - формат, предназначенный для обмена информацией (прежде всего новостями) между сайтами. Формат RSS является диалектом XML. Получить полную информацию по формату RSS 2.0 можно по адресу http://backend.userland.com/rss.

Терминология

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

Экспорт в RSS

Существует три способа экспорта содержимого информационного блока в формат RSS

Динамическая ("на лету") генерация RSS файла по запросу сайта-клиента.

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

Для доступа к RSS файлу сайт-клиент должен запросить скрипт /bitrix/rss.php с сайта-сервера с параметрами ID, LANG, TYPE и LIMIT.

Параметры запроса
Параметр Описание
ID Код информационного блока или символьный код инфоблока.
LANG Сайт информационного блока.
TYPE Тип информационного блока.
LIMIT Сколько элементов информационного блока выдавать.

Пример запроса
http://www.ваш_сайт.ru/bitrix/rss.php?ID=3&LANG=ru&TYPE=news&LIMIT=3

Прегенерация RSS файла

Для включения этого способа необходимо на сайте-сервере поставить флаг Разрешен экспорт в RSS файл в настройках информационного блока и установить поля Количество экспортируемых в RSS файл элементов (ограничивает максимальное количество экспортируемых в файл элементов, -1 для отсутствия ограничений) и За сколько последних дней экспортировать в RSS файл (ограничивает экспортируемые в файл элементы заданным количеством последних дней по началу периода активности элемента, -1 для отсутствия ограничений).

RSS будет генерироваться с периодичностью, заданной в поле Действительно (часов), и сохраняться в файл с именем типа iblock_rss_<ID блока>.xml в каталог, заданный в настройках модуля информационных блоков.

Для доступа к RSS файлу сайт-клиент должен запросить файл http://<сайт-сервер>/<путь из настроек модуля информационных блоков>/iblock_rss_<ID блока>.xml.

Примеры запроса

http://www.ваш_сайт.ru/upload/iblock_rss_3.xml

Прегенерация RSS файла в Yandex-формате.

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

RSS будет генерироваться с периодичностью, заданной в поле Действительно (часов), и сохраняться в файл с именем типа yandex_rss_<ID блока>.xml в каталог, заданный в настройках модуля информационных блоков.

Для доступа к RSS файлу сайт-клиент должен запросить файл http://<сайт-сервер>/<путь из настроек модуля информационных блоков>/yandex_rss_<ID блока>.xml.

Пример запроса
http://www.ваш_сайт.ru/upload/yandex_rss_3.xml

 Структура элемента канала в RSS файле

По умолчанию при генерации RSS узел <item> строится следующим образом:

<item>
  <title>Поле Название элемента информационного блока</title>
  <link>Поле URL страницы детального просмотра информационного блока</link>
  <description>Поле Описание для анонса элемента информационного блока, если оно заполнено. Иначе поле Описание для детального просмотра элемента информационного блока.</description>
  <pubDate>Поле Период активности элемента информационного блока.</pubDate>
  <enclosure url="Адрес изображения, загруженого в поле Описание для анонса элемента информационного блока." length="Размер файла изображения" type="Тип файла изображения" width="Ширина файла изображения" height="Высота файла изображения"/>
  <yandex:full-text>Только в Yandex-формате. Поле Описание для детального просмотра элемента информационного блока.</yandex:full-text>
</item>

Изменить генерацию можно на странице редактирования информационного блока в разделе Привязка полей для выгрузки в RSS. Поля RSS могут принимать любые текстовые значения. Кроме того можно использовать параметры, которые при генерации будут заменены на реальные данные. Параметры записываются в виде #ИМЯ#. В качестве имени параметра могут быть использованы коды свойств, а так же следующие значения:

  • NAME - заголовок элемента информационного блока;
  • DETAIL_PAGE_URL - адрес страницы с детальной информацией об элементе;
  • PREVIEW_TEXT - описание для анонса;
  • DETAIL_TEXT - описание для детального просмотра;
  • ACTIVE_FROM - начало периода активности/

Импорт из RSS

Для получения информации на сайте-клиенте следует воспользоваться методом GetNewsEx класса CIBlockRSS. Метод GetNews также доступен, но не рекомендуется к использованию как устаревший.

array
CIBlockRSS::GetNewsEx(
 SITE, 
 PORT, 
 PATH, 
 QUERY_STR
);

Функция возвращает канал из кэша (если он не устарел) или с сайта-сервера.

Параметры запроса

SITE Адрес сайта-сервера. Например, "www.ваш_сайт".
PORT Порт сайта-сервера. Например, 80.
PATH Путь к скрипту, генерирующему RSS на сайте-сервере. Например, "/bitrix/rss.php".
QUERY_STR Строка запроса, если она необходима. Например, ID=3&LANG=ru&TYPE=news&LIMIT=5. Обратите внимание, что строка запроса должна строиться на основании спецификации HTTP.

Возвращаемое значение

Функция возвращает массив, содержащий данные запрошеного RSS файла.

Примеры использования


<?
CModule::IncludeModule("iblock");
$arRes = CIBlockRSS::GetNewsEx("www.bitrix.ru", 80, "/bitrix/rss.php", "ID=3&LANG=ru&TYPE=news&LIMIT=5");
$arRes = CIBlockRSS::FormatArray($arRes);

echo $arRes["title"];          // Название канала/блока
echo $arRes["link"];           // Ссылка на сайт-сервер
echo $arRes["description"];    // Описание канала/блока
echo $arRes["lastBuildDate"];  // Дата генерации файла на сайте-сервере
echo $arRes["ttl"];            // Через сколько часов обновить с сайта-сервера

echo $arRes["image"]["title"];   // Заголовок изображения блока/канала, если есть
echo $arRes["image"]["url"];     // Ссылка на файл изображения блока/канала, если есть
echo $arRes["image"]["width"];   // Ширина изображения блока/канала, если есть
echo $arRes["image"]["height"];  // Высота изображения блока/канала, если есть

echo $arRes["item"][0]["title"];       // Заголовок первой новости
echo $arRes["item"][1]["title"];       // Заголовок второй новости
echo $arRes["item"][1]["link"];        // Ссылка на вторую новость
echo $arRes["item"][1]["description"]; // Описание второй новости
echo $arRes["item"][1]["pubDate"];     // Дата публикации второй новости
echo $arRes["item"][1]["enclosure"]["url"];     // Ссылка на файл-вложение второй новости
echo $arRes["item"][1]["enclosure"]["length"];  // Размер файла-вложения второй новости
echo $arRes["item"][1]["enclosure"]["type"];    // MIME тип файла-вложения второй новости
echo $arRes["item"][1]["enclosure"]["width"];   // Ширина файла-вложения картинки
echo $arRes["item"][1]["enclosure"]["height"];  // Высота файла-вложения картинки

?>

<?
CModule::IncludeModule("iblock");
$arRes = CIBlockRSS::GetNewsEx("www.bitrix.ru", 80, "/bitrix/rss.php", "ID=demo&LANG=ru&TYPE=news&LIMIT=5");
$arRes = CIBlockRSS::FormatArray($arRes);
?>
<b><?echo $arRes["title"] ?></b><br>

<table cellpadding="2" cellspacing="0" border="0" width="80%">
  <?for ($i = 0; $i < count($arRes["item"]); $i++):?>
  <tr>
    <td width="100%">
      <font class="date">
        <?echo $arRes["item"][$i]["pubDate"]?>
      </font>&nbsp;|&nbsp;
      <?if (strlen($arRes["item"][$i]["link"])>0):?>
        <a href="<?echo $arRes["item"][$i]["link"]?>" class="zag">
      <?endif;?>
      <?echo $arRes["item"][$i]["title"]?>
      <?if (strlen($arRes["item"][$i]["link"])>0):?>
        </a>
      <?endif;?>
      <br>
    </td>
  </tr>
  <tr>
    <td valign="top" width="100%">
      <?if (strlen($arRes["item"][$i]["enclosure"]["url"])>0):?>
        <table cellpadding="0" cellspacing="0" border="0" align="left">
          <tr>
            <td valign="top">
              <img src="<?echo $arRes["item"][$i]["enclosure"]["url"] ?>" width="<?echo $arRes["item"][$i]["enclosure"]["width"] ?>" height="<?echo $arRes["item"][$i]["enclosure"]["height"]?>" border="0">
            </td>
          </tr>
        </table>
      <?endif;?>
      <font class="text">
        <?echo $arRes["item"][$i]["description"];?>
        <br>
      </font>
    </td>
  </tr>
  <?endfor;?>
</table>

Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
© «Битрикс», 2001-2017, «1C-Битрикс», 2017