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> | <?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>