Руководство
Синхронизация всего каталога
/cars потоково выгружает все активные автомобили из ваших источников с полными отчётами через серверный курсор. Используйте его для локальной копии; /search — только для пользовательских запросов.
GET /carslimit до 2000, без scroll_id
сохранить data[]upsert по id, пропуск, если hash не изменился
GET next_urlбез изменений, до истечения курсора
scroll_id nullпроход завершён
архивацияавтомобилей, не встреченных в этом проходе
- Начните проходЗапросите
/carsбезscroll_id. Задавайте фильтры, напримерdomains[]илиis_leasing, только здесь. - Следуйте
next_urlв точностиСохраняйте тот же ключ и фильтры на протяжении всего прохода. Изменениеdomains[]илиis_leasingпосреди прокрутки возвращает422. - Запрашивайте до истечения курсора
scroll_time— от 1 до 15 минут (по умолчанию 10), считая от последнего запроса. При403/404с "scroll id was expired" начните новый проход. - Завершите проход, затем архивируйтеПроход заканчивается, когда
scroll_idравен null, аdataпуст. Только после этого помечайте не встреченные автомобили как проданные.
Выполняйте полный проход 2–3 раза в день. Архивированные автомобили сразу исчезают из /search и /cars, но остаются доступны через /cars/{car_id} и /listing/{domain_id}/{listing_id} с archived: true около месяца.
Цикл полного экспорта
url="https://api.lotarius.com/cars?limit=2000&api_key=$CARS_API_KEY"
while [ -n "$url" ]; do
page=$(curl -sfg "$url" -H "Accept: application/json") || { echo "cursor expired, restart"; exit 1; }
echo "$page" | jq -c '.data[]' >> cars.ndjson
url=$(echo "$page" | jq -r '.next_url // empty')
doneПоследняя страницаLive
{
"scroll_id": null,
"data": [],
"total": 3217391,
"message": "No more data"
}