Парсинг новостных лент для автонаполнения 1С-Битрикс
Новостной раздел сайта на 1С-Битрикс, который обновляется раз в месяц, хуже, чем его отсутствие. Поисковые системы видят заброшенный ресурс, пользователи теряют доверие. Автонаполнение через парсинг новостных лент решает задачу регулярного обновления контента, но требует грамотной реализации — иначе получите дубли, битую вёрстку и проблемы с уникальностью.
Источники данных
Новостные ленты доступны в нескольких форматах:
- RSS/Atom-фиды — стандартизированный XML с заголовком, описанием, ссылкой, датой. Поддерживаются большинством СМИ и блогов. Наиболее надёжный источник.
- API новостных агрегаторов — NewsAPI, Mediastack, Currents API. Структурированный JSON, платные тарифы для коммерческого использования.
- HTML-страницы — парсинг непосредственно сайтов-источников. Ненадёжно: вёрстка меняется, защита от ботов, юридические риски.
Для автонаполнения Битрикс-сайтов RSS-фиды — оптимальный баланс надёжности и простоты. Начинать стоит именно с них.
Архитектура парсера RSS
Парсер новостей для Битрикс состоит из трёх слоёв:
1. Сборщик (Fetcher). Забирает RSS-фиды по списку URL. Использует file_get_contents с контекстом или cURL с таймаутами. Каждый фид парсится через SimpleXMLElement или библиотеку SimplePie.
$xml = simplexml_load_string($rssContent);
foreach ($xml->channel->item as $item) {
$title = (string)$item->title;
$link = (string)$item->link;
$date = strtotime((string)$item->pubDate);
$desc = (string)$item->description;
}
2. Обработчик (Processor). Очищает HTML-теги из описаний, скачивает и сохраняет изображения, нормализует даты, определяет категорию по ключевым словам или источнику.
3. Импортёр (Importer). Создаёт элементы в инфоблоке Битрикс через CIBlockElement::Add(). Проверяет дубли по XML_ID (обычно — URL статьи или GUID из фида).
Хранение в инфоблоке
Новости в Битрикс хранятся в инфоблоке стандартной структуры. Рекомендуемый маппинг:
| Поле RSS | Поле инфоблока | Тип |
|---|---|---|
title |
NAME |
Строка |
link |
PROPERTY_SOURCE_URL |
Ссылка |
description |
PREVIEW_TEXT |
HTML/текст |
content:encoded |
DETAIL_TEXT |
HTML |
pubDate |
ACTIVE_FROM |
Дата |
guid / link |
XML_ID |
Строка (для дедупликации) |
category |
IBLOCK_SECTION_ID |
Привязка к разделу |
enclosure / media:content |
PREVIEW_PICTURE |
Файл |
XML_ID — обязательное поле. Без него при каждом запуске парсера создаются дубли. В качестве XML_ID используйте md5-хеш от URL статьи — это гарантирует уникальность даже при смене GUID в фиде.
Обработка контента
Сырой HTML из RSS непригоден для публикации. Типовые проблемы:
-
Внешние изображения — ссылки на картинки ведут на сайт-источник. При его недоступности картинки пропадают. Решение: скачивать изображения в
/upload/при импорте. -
Сторонние скрипты и iframe — фиды могут содержать виджеты, счётчики, встроенные видео. Используйте
strip_tags()с whitelist разрешённых тегов или библиотекуHTMLPurifier. -
Относительные ссылки — ссылки вида
/article/123без домена. Преобразуйте в абсолютные, подставив домен источника. -
Кодировка — фиды могут приходить в UTF-8, Windows-1251, ISO-8859-1. Детектируйте кодировку через
mb_detect_encoding()и конвертируйте в UTF-8.
Расписание и cron
Парсер запускается через cron. Частота зависит от типа новостей:
- Срочные новости (информагентства) — каждые 15–30 минут.
- Отраслевые новости — каждые 1–2 часа.
- Блоги и аналитика — 1–2 раза в сутки.
Cron-задача вызывает PHP-скрипт, который подключает ядро Битрикс:
$_SERVER['DOCUMENT_ROOT'] = '/home/bitrix/www';
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
CModule::IncludeModule('iblock');
Альтернативный вариант — агент Битрикс (b_agent), но для длительных операций cron надёжнее: агенты имеют лимит по времени выполнения и блокируют друг друга.
Дедупликация и контроль качества
Помимо проверки по XML_ID, рекомендуется:
- Фильтр по дате — не импортировать новости старше N дней. Иначе при первом подключении нового фида каталог заполнится устаревшим контентом.
- Минимальная длина — отбрасывать записи с описанием короче 100 символов. Это отсекает технические записи и анонсы без содержания.
- Стоп-слова — фильтровать новости по ключевым словам, нерелевантным тематике сайта.
- Лимит на источник — не более N новостей в сутки с одного фида, чтобы один активный источник не вытеснил остальные.
Автоматическая категоризация
Простейший вариант — маппинг «источник → раздел инфоблока». Все новости из фида TechCrunch идут в раздел «Технологии», из RBK — в «Экономику».
Более гибкий подход — классификация по ключевым словам в заголовке и тексте. Массив правил вида:
$rules = [
'Технологии' => ['AI', 'блокчейн', 'стартап', 'приложение'],
'Финансы' => ['акции', 'курс', 'инвестиции', 'IPO'],
];
Для 10+ категорий и серьёзных требований к точности — подключайте внешний классификатор (OpenAI API, Yandex GPT) или обученную модель.
Юридическая сторона
Публикация чужих новостей «как есть» нарушает авторские права. Допустимые варианты:
- Публикация заголовка + первых 2–3 предложений со ссылкой на источник (добросовестное цитирование).
- Автоматический рерайт через LLM (GPT, YandexGPT) — юридически спорно, но на практике применяется.
- Использование фидов с открытой лицензией (Creative Commons, государственные источники).







