К содержимому

Документация

Полный цикл сбора через API

Все запросы ниже выполняются относительно /api/v1 с Bearer API-ключом, разрешающим запись. В примерах идентификаторы условные: заменяйте их значениями из ответов.

1. Создайте сайт

POST /sites

{"name":"Каталог товаров","base_url":"https://shop.example.invalid","rps":1,"concurrency":1}

name: название, base_url: полный URL с http:// или https://. Домен в примере намеренно нерабочий: укажите свой источник. Код сайт получает автоматически. При работе через API можно передать собственный code: строчные латинские буквы, цифры, _, -, до 64 символов.

Дополнительно можно задать render_mode, respect_robots, timeout_ms, proxy_pool_id, max_run_seconds, execution_target и agent_id. Настройки скорости действуют и при запуске через API. Код сайта после создания менять нельзя.

В запросе multipart/form-data можно передать необязательный файл icon (PNG, JPEG или WebP до 4 МБ). Платформа преобразует его в статичное изображение. Для замены значка созданного сайта используйте POST /sites/{site}/icon с тем же полем icon.

2. Создайте сценарий

POST /scripts

{"site_id":1,"code":"catalog-main","name":"Сбор каталога","entry":"run"}

Код сценария содержит строчные латинские буквы, цифры и дефис. Сохраните возвращённый id.

3. Сохраните и проверьте версию

POST /scripts/2/versions: передайте source с PHP-кодом и необязательный comment. Максимум исходника: 500 000 символов. Сохранение версии само по себе не означает публикацию и успешную проверку.

POST /scripts/2/validate проверяет исходник. GET /sandbox/sdk возвращает доступный контракт SDK. Написание алгоритмов, разрешённые методы и готовые примеры описаны в разделе SDK.

Запустите POST /script-versions/3/trial-run и проверьте журнал и полученные данные. Для публикации отправьте POST /scripts/2/publish с {"version_id":3}. Публикуйте только проверенную версию.

4. Запустите сбор

POST /runs

{"site_id":1,"script_id":2,"params":{}}

Ответ 202 означает постановку в очередь. Это ещё не завершённый сбор. Опросите GET /runs/{id} с интервалом 3–5 секунд. Журнал: GET /runs/{id}/log; запросы: /http-log; ошибки записей: /item-errors. После завершения прочитайте GET /sites/1/records.

Для отмены: POST /runs/{id}/cancel. Возобновление поддерживаемого прогона: /resume. Повтор по сохранённым ответам: /replay; отчёт: /replay-report. Повтор не всегда возможен после очистки снимков.

5. Настройте расписание

POST /schedules

{"script_id":2,"name":"Дважды в день","kind":"cron","timezone":"Europe/Moscow","preset":{"cron":"0 2,12 * * *"},"is_active":true}

Это 02:00 и 12:00 по Москве. Для полуночи используйте 0 0 * * *. Cron передаётся внутри preset, не отдельным полем. Другие виды: interval, daily, weekly, monthly. До сохранения можно проверить настройки через POST /schedules/preview.

Пауза: POST /schedules/{id}/pause; включение: /resume; внеочередной запуск: /run-now; история: GET /schedules/{id}/events. Расписание не гарантирует одновременный старт при занятом исполнителе или исчерпанном бюджете.

Защита от повторов

Универсального заголовка Idempotency-Key пока нет. При тайм-ауте запуска сначала проверьте последние прогоны: слепой повтор POST может создать второй запуск. Для обновления используйте PATCH существующего ресурса.