Здравствуйте.
Мы автоматизируем разработку кастомных JS/TypeScript-парсеров (API v2). Сейчас Classic API хорошо покрывает задания и результаты, но не покрывает жизненный цикл самого парсера: файл приходится заливать через WebPanel/SSH, а новую папку — подхватывать только после перезапуска A-Parser.
Для удобства достаточно двух методов.
1. saveParser — создать или обновить JS/TS-парсер
Ответ:
При ошибке компиляции:
Требования:
name — имя папки без префикса JS::. Custom-MyParser превращается в парсер JS::Custom::MyParser.
create: false — обновить существующий, create: true — создать новый.
reload: true — сразу загрузить парсер без полного перезапуска A-Parser.
backup: true — сохранить предыдущую версию файла.
Возвращать не только saved, но и compiled, reloaded и errors с номерами строк.
Проверять соответствие имени класса папке: JS_ + папка, дефисы заменяются на подчёркивания. Предупреждать, если в парсере не выставлен results.success = 1.
2. testParser — протестировать парсер до сохранения
Ответ:
Требования:
code — необязательный: если передан, тестируется новая версия без сохранения; если нет — текущая сохранённая.
queries — один или несколько запросов за вызов, чтобы проверять регрессию.
success в каждом результате — это results.success из парсера, а не только успех HTTP-запроса.
Возвращать compiled, errors с line и column, duration, successCount и failedCount.
Возвращать и rawResults, и resultString, для настройки формата.
save: true — сохранить только если все запросы успешны, атомарно.
Почему это важно
Не нужен доступ WebPanel/SSH.
Не нужен полный перезапуск A-Parser ради новой папки парсера.
Можно тестировать новую версию до сохранения и откатываться при ошибке.
Ошибки компиляции приходят с номерами строк, а не в виде Rollup failed: HASH(...) или CBOR::XS::Tagged=ARRAY.
Удобно строить CI/CD: сохранить, проверить, прогнать несколько доменов, задеплоить.
Этих двух методов достаточно для базового сценария. Готовы протестировать beta-версию на нашем инстансе и дать обратную связь.
Спасибо.
Мы автоматизируем разработку кастомных JS/TypeScript-парсеров (API v2). Сейчас Classic API хорошо покрывает задания и результаты, но не покрывает жизненный цикл самого парсера: файл приходится заливать через WebPanel/SSH, а новую папку — подхватывать только после перезапуска A-Parser.
Для удобства достаточно двух методов.
1. saveParser — создать или обновить JS/TS-парсер
Код:
{ "password": "...", "action": "saveParser", "data": { "name": "Custom-MyParser", "language": "typescript", "code": "import { BaseParser } from 'a-parser-types'; ...", "create": true, "reload": true, "backup": true } }
Ответ:
Код:
{ "success": 1, "data": { "name": "JS::Custom::MyParser", "saved": true, "compiled": true, "reloaded": true, "warnings": [], "errors": [] } }
При ошибке компиляции:
Код:
{ "success": 1, "data": { "saved": true, "compiled": false, "reloaded": false, "errors": [ { "line": 12, "column": 5, "message": "..." } ] } }
Требования:
name — имя папки без префикса JS::. Custom-MyParser превращается в парсер JS::Custom::MyParser.
create: false — обновить существующий, create: true — создать новый.
reload: true — сразу загрузить парсер без полного перезапуска A-Parser.
backup: true — сохранить предыдущую версию файла.
Возвращать не только saved, но и compiled, reloaded и errors с номерами строк.
Проверять соответствие имени класса папке: JS_ + папка, дефисы заменяются на подчёркивания. Предупреждать, если в парсере не выставлен results.success = 1.
2. testParser — протестировать парсер до сохранения
Код:
{ "password": "...", "action": "testParser", "data": { "name": "Custom-MyParser", "language": "typescript", "code": "...", "save": false, "queries": ["example.com", "ya.ru"], "preset": "default", "rawResults": 1, "doLog": 1, "timeout": 60 } }
Ответ:
Код:
{ "success": 1, "data": { "parser": "JS::Custom::MyParser", "compiled": true, "queries": 2, "successCount": 2, "failedCount": 0, "duration": 1.8, "results": [ { "query": "example.com", "success": 1, "fields": { "domain": "example.com", "status": "ok", "metrics_table": "Домен@!@Статус~!example.com@!@ok" }, "resultString": "Домен@!@Статус!~example.com@!@ok\n", "logs": [] } ], "errors": [] } }
Требования:
code — необязательный: если передан, тестируется новая версия без сохранения; если нет — текущая сохранённая.
queries — один или несколько запросов за вызов, чтобы проверять регрессию.
success в каждом результате — это results.success из парсера, а не только успех HTTP-запроса.
Возвращать compiled, errors с line и column, duration, successCount и failedCount.
Возвращать и rawResults, и resultString, для настройки формата.
save: true — сохранить только если все запросы успешны, атомарно.
Почему это важно
Не нужен доступ WebPanel/SSH.
Не нужен полный перезапуск A-Parser ради новой папки парсера.
Можно тестировать новую версию до сохранения и откатываться при ошибке.
Ошибки компиляции приходят с номерами строк, а не в виде Rollup failed: HASH(...) или CBOR::XS::Tagged=ARRAY.
Удобно строить CI/CD: сохранить, проверить, прогнать несколько доменов, задеплоить.
Этих двух методов достаточно для базового сценария. Готовы протестировать beta-версию на нашем инстансе и дать обратную связь.
Спасибо.
Последнее редактирование: