Парсер RSS лент

06 ноября 2017, 14:09

Настройка RSS задания

При добавлении полей ленты, которые надо парсить, вместо названия поля (title или enclosure[url]) можно указать @INLINE чанк, который будет обработан Fenom. Благодаря этому, в этих полях можно выстраивать совершенно любую логику, вплоть до создания новых разделов «на ходу».

Добавление задания

Заходим на страницу компонента, жмём "Добавить RSS-ленту". На вкладке "Основное" заполняем примерно так:

Переключаемся на вкладку "Конфигурация", где можно указать:

  • Шаблон для создаваемых ресурсов,
  • Контекст,
  • Родительский контейнер в пределах выбранного контекста,
  • Сконфигурировать скачивание медиа-контента,
  • При необходимости поменять базовый тег ленты и базовый тег записи.

Расширения медиа-контента и папки для сохранения каждого из расширений указываются в JSON.

Жмём "Сохранить". Задание добавлено!

Добавление полей для парсинга

На только что добавленном задании нажимаем правой кнопкой и выбираем "Поля задания":

Откроется список полей задания, который пока пуст.

Помимо добавления полей задания мы можем просмотреть "Массив значений ленты" - это распечатанный массив с данными из первой записи ленты:

Запоминаем названия полей, которые нам надо спарсить на сайт и кликаем "Добавить поле". Откроется окошко с возможностью указать:

  1. Системное поле. Выпадающий список системных полей ресурса и ТВ-полей.
  2. Поле в источнике. Текстовое поле, в которое нужно ввести наименование тега в RSS-ленте. Можно указать @INLINE чанк, который будет обработан Fenom из pdoTools. В чанке содержатся плейсхолдеры всех возможных полей из RSS-ленты, которые имеются в записи между тегами item (еще они хранятся в массиве $_pls), а также массив с настройками задания $_task. За счёт внедрения в данное поле Fenom, можно будет, получая значение из тега category (как, например, в RSS Lenta.ru) делать выборку по базе ресурсов, в поисках ID аналогичной категории на нашем сайте и если не найдено - добавлять. Тег enclosure (и ему подобные), указываются, либо через чанк @INLINE {$enclosure['url']}, либо в виде CSS селектора enclosure[url]. Если не указано или значение по данному полю в ленте пустое, то в качестве значения для Системное поле будет взято значение из следующего поля - Значение по-умолчанию.
  3. Значение по-умолчанию. В данном поле можно указать значение, которое будет записано в Системное поле. Например, если мы в Системное поле выбрали class_key, то, чтобы создавались Тикеты, мы в поле Значение по-умолчанию пишем Ticket, а Поле в источнике оставляем пустым. Такую же "магию" можно сделать и с полем published, указав в значении по-умолчанию цифру 1. Тогда ресурс на сайт будет добавляться сразу опубликованным.

Помимо основых полей с данными, которые необходимо выгрузить на сайт, нам надо добавить поле, по которому xParser будет понимать, что данная запись уже есть на сайте. Это поле имеет статус Уникальное. Для этого добавляем новое поле:

  • Системное поле оставляем пустым,
  • Поле в источнике = guid потому что он менее всего подвержен изменениям.

Сохраняем! В списке полей задания, на этом поле ставим указатель Уникальное поле (кнопка со звездой слева):

Всё готово к парсингу, как к единоразовому, так и к ежеминутному (у компонента есть скрипт для запуска заданий из крон).


Следующий документ
Парсер HTML контента + Совмещенные задания