Доноры 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. станут сломанными, их выбирают заново.
Параметры запроса и {search}
На карточке донора — таблица параметров запроса: пары «имя — значение» дописываются к 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 | Модуль сам получает ключ по идентификатору и секрету клиента и подставляет его в запрос |
Секрет хранится у донора и в журнал не пишется.
Опрос схемы
- Сохраните донор с корректным URL (и при необходимости параметрами).
- Нажмите Опросить схему (или Перестроить схему / Сбросить схему).
- При успехе таблица схемы заполнится путями; при ошибке опроса обычным способом старая схема не затирается пустым успехом. После сброса старая схема уже удалена — если опрос не удастся, она не вернётся.
| Кнопка | Что делает |
|---|---|
| Опросить схему | Ещё раз открыть адрес и обновить найденные поля. Имена и типы, поправленные вручную, можно оставить |
| Перестроить схему | Собрать список полей заново; отметки «последний узел» остаются |
| Сбросить схему | Стереть всю схему и сразу опросить адрес заново |
Повторный опрос обновляет снимок; поля, исчезнувшие из ответа, помечаются «Нет» в колонке Актуально — связанные шаблоны могут получить сломанные ссылки (см. Шаблоны).
На карточке над таблицей есть свёрнутая подсказка: 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
- URL с одним объектом artist → выберите Корень.
- Опрос → в схеме появятся
name,area.name,begin-area.nameи др. - При необходимости отметьте группы «последний узел» — см. Вложенные поля.
- Создайте шаблон на этом доноре.
Файл настроек
На карточке, справа от «К списку»: Выгрузить и Заменить. В списке доноров кнопка Из файла создаёт нового донора. В строке меню Действия: править, включить или отключить, удалить, выгрузить, заменить из файла.
В файл входят адреса, узел списка, параметры, схема и способ доступа. Ключ, пароль и секрет клиента в файл не пишутся. При замене уже сохранённый ключ остаётся. Если имя занято, новая запись получает добавку (2). Замена чужим именем отказывается.
Лишний путь в таблице схемы убирается крестиком у этого пути. Вложенные пути остаются. Запись в базу — при сохранении карточки. Описание поля стоит под коротким именем.