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>