DevCraft Документации
Руководства

Доноры v210.1.0

Настройка донора ParserKit: URL, узел списка list_node, режим «корень», опрос схемы.

Что такое донор

Донор — один источник данных: URL, по которому модуль загружает RSS, Atom, XML или JSON. После опроса сохраняется снимок схемы — пути полей с alias и типом; в шаблонах значения задаются Twig-выражениями ({{ alias }}, {{ area.name }}, циклы и условия).

Раздел админки: ?mod=parserkit&action=donors → карточка донора.

Поля карточки

ПолеСмысл
Адрес спискаПоиск и список записей. {search} — фраза поиска
Адрес карточкиОдна запись. {key} — ключ выбранной строки. Пустое поле — данные берутся из списка
Узел спискаГде в ответе лежит массив записей (см. ниже)
Параметры запросаПары «имя — значение», добавляются к адресу. Значение — своё или из поля новости. В значении допустим {search}
Метод запросаGET или POST (продвинутые настройки)
ЗаголовкиСвои заголовки HTTP; в значении допустим {search}
Тело POSTТекст тела при методе POST (JSON и т.п.); допустим {search}
User-Agent у донораСвой / случайный из пула / свежий с API (см. User-Agents)
Фраза поиска по умолчаниюПодставляется вместо {search} при опросе схемы
Поле новости для {search}На форме новости фраза берётся из этого поля. По умолчанию — заголовок
СхемаТаблица полей: путь, alias, тип, роль, пример
Статус опросаУспех или текст ошибки

Узел списка (list_node)

Ответ донора может быть:

  • Лента — повторяющиеся элементы (item, entry, свой узел).
  • Один объект — например artist в MusicBrainz: массива записей нет, но данные есть.

В форме выбор:

Вариант в UIВ БДПоведение
Автонайденный узел или пустоЭвристика ищет повторяющийся узел
Кореньlist_node=""Весь ответ = одна запись
Вручную / кандидатимя узла, напр. artistСписок строится из этого массива

Корень = пустая строка

Режим «одна запись = корень» хранится как пустой list_node в базе. В интерфейсе подпись «Корень». Служебные значения вроде __root__ не используются.

Когда выбрать «Корень»

  • URL отдаёт один JSON/XML-объект без массива однотипных элементов.
  • Нужна схема полей верхнего уровня и вложенных веток (область, даты и т.д.), а список для fill содержит ровно одну строку.

Когда указать узел вручную

  • В ответе есть массив, но он не называется item / entry.
  • Авто-режим выбрал не тот узел — выберите кандидата из списка или введите имя в поле «Вручную».

Два адреса

Если список и карточка живут на разных адресах, заполните оба поля.

Адрес списка отдаёт много записей. Адрес карточки открывается для выбранной строки: {key} берётся из ключа списка. Пример: список https://example/films?keyword={search}, карточка https://example/films/{key}.

Опрос читает список, затем карточку. Поля списка получают приставку query. (поле списка). Поля карточки — single. (поле карточки), от корня ответа карточки. Одинаковое имя живёт дважды: query.nameRu и single.nameRu. Если адрес карточки пуст, приставок нет и схема как раньше.

После опроса на карточке донора выбирают ключ списка (query.…) и ключ карточки (single.…). Ключ списка подставляется в {key}. Ключ карточки только хранится. Оба ключа общие для шаблонов этого донора.

Если карточка не открылась, поля списка остаются, текст ошибки остаётся на карточке донора, полей карточки нет.

Наведение на путь в таблице показывает исходный путь первой записи, с .0 на месте списка. В выражение этот путь не входит. Старые шаблоны после такого опроса не переписываются: ссылки без query. и single. станут сломанными, их выбирают заново.

На карточке донора — таблица параметров запроса: пары «имя — значение» дописываются к URL при опросе и при заполнении на форме.

ЭлементСмысл
ИмяИмя параметра в адресе, напр. q или fmt
Своё значениеТекст, который уходит как есть. В нём можно написать {search}
Из поля новостиТекст берётся из выбранного поля формы новости в момент поиска
{search}Место для поисковой фразы: в адресе списка или в своём значении
Фраза по умолчаниюТолько для опроса схемы. На форме новости её нет
Поле новости для {search}Откуда на форме новости брать фразу. Пустое поле останавливает поиск с подписью этого поля
Диалог при опросеМожно ввести другую фразу перед запросом

Список «Поле новости для {search}» — заголовок, ЧПУ, теги, описание, ключевые слова, краткое и полное описание, плюс дополнительные поля типа «одна строка». В режиме «Из поля новости» к ним добавляются все дополнительные поля любого типа.

Пример: адрес https://api.example/search, параметр q = {search}, фраза по умолчанию Beatles. Опрос уходит с ?q=Beatles. На форме новости {search} берётся из выбранного поля (по умолчанию — заголовок). Параметр «из поля» на опросе уходит пустым: формы новости в этот момент нет.

Авторизация

На карточке донора блок Авторизация задаёт, как модуль входит к API. Один и тот же способ используется при опросе схемы и при заполнении новости.

СпособЧто уходит в запрос
НетАдрес и параметры запроса как есть
BearerЗаголовок Authorization с ключом
Имя и парольЗаголовок Authorization с именем и паролем
Ключ в адресеОтдельный параметр адреса, не из таблицы параметров запроса
Свой заголовокИмя и значение заголовка, например X-Api-Key
OAuth2Модуль сам получает ключ по идентификатору и секрету клиента и подставляет его в запрос

Секрет хранится у донора и в журнал не пишется.

Опрос схемы

  1. Сохраните донор с корректным URL (и при необходимости параметрами).
  2. Нажмите Опросить схему (или Перестроить схему / Сбросить схему).
  3. При успехе таблица схемы заполнится путями; при ошибке опроса обычным способом старая схема не затирается пустым успехом. После сброса старая схема уже удалена — если опрос не удастся, она не вернётся.
КнопкаЧто делает
Опросить схемуЕщё раз открыть адрес и обновить найденные поля. Имена и типы, поправленные вручную, можно оставить
Перестроить схемуСобрать список полей заново; отметки «последний узел» остаются
Сбросить схемуСтереть всю схему и сразу опросить адрес заново

Повторный опрос обновляет снимок; поля, исчезнувшие из ответа, помечаются «Нет» в колонке Актуально — связанные шаблоны могут получить сломанные ссылки (см. Шаблоны).

На карточке над таблицей есть свёрнутая подсказка: list в колонке «Тип» — несколько однотипных записей; group в колонке «Роль» — папка без своего значения (можно обрезать потомков).

Колонки таблицы схемы

КолонкаСмысл
ПутьКороткий путь (query.nameRu, area.name). Наведение показывает исходный путь первой записи
AliasКороткое имя для Twig (из последнего куска пути, напр. year для single.year); если пусто — в выражениях используйте путь
Типstring, int, date, list, object и др. — влияет на подсказки в окне «Схема»
Рольleaf (значение) или group (контейнер без своего значения)
ПримерОбразец из последнего опроса
Последний узелТолько у group: обрезка ветки (см. Вложенные поля)

Alias уникален только внутри одного донора — у другого донора то же имя year можно задать снова. Если на этой карточке имя уже занято (часто query.year и single.year), окно покажет путь владельца; кнопка «Забрать имя» снимет его с чужого поля. При опросе короткое имя в первую очередь достаётся полям карточки (single.*).

Alias и тип можно править на карточке; при следующем опросе сохранённые alias и типы для существующих путей не сбрасываются.

HTTP

User-Agent запросов к донору настраивается в Настройках модуля (по умолчанию DLE-ParserKit/210.1.0).

Пример: artist-подобный URL

  1. URL с одним объектом artist → выберите Корень.
  2. Опрос → в схеме появятся name, area.name, begin-area.name и др.
  3. При необходимости отметьте группы «последний узел» — см. Вложенные поля.
  4. Создайте шаблон на этом доноре.

Файл настроек

На карточке, справа от «К списку»: Выгрузить и Заменить. В списке доноров кнопка Из файла создаёт нового донора. В строке меню Действия: править, включить или отключить, удалить, выгрузить, заменить из файла.

В файл входят адреса, узел списка, параметры, схема и способ доступа. Ключ, пароль и секрет клиента в файл не пишутся. При замене уже сохранённый ключ остаётся. Если имя занято, новая запись получает добавку (2). Замена чужим именем отказывается.

Лишний путь в таблице схемы убирается крестиком у этого пути. Вложенные пути остаются. Запись в базу — при сохранении карточки. Описание поля стоит под коротким именем.

См. также

На этой странице