Рецепти
Шест цялостни сценария, които покриват повечето от това, за което е API. Всеки е пълна последователност, а не фрагмент.
Първо задайте API=https://api.thecarapi.com и KEY=your_key.
1. Странична лента с филтри с една заявка
Шест измерения, едно отиване и връщане, една единица от квотата:
curl -sS -H "X-API-Key: $KEY" --compressed \
"$API/api/facets?fields=brands,years,fuels,gearboxes,countries,sites"След това стеснявайте според избора на потребителя. Фасетите се филтрират взаимно: подайте вече избраните филтри и всяко оставащо измерение се преброява спрямо тях, като всяко измерение пак игнорира собствения си филтър, за да може потребителят да промени решението си.
# След „BMW, под 15 000 евро“: кои горива и години остават?
curl -sS -H "X-API-Key: $KEY" \
"$API/api/facets?fields=fuels,years&brand=bmw&price_to=15000"Моделите са за всяка марка и остават на собствен маршрут:
curl -sS -H "X-API-Key: $KEY" "$API/api/models?brand=bmw&ordering=-count&limit=25"Кеширайте страничната лента. Фасетите се сервират с max-age=600 и ETag; пазете го и изпращайте If-None-Match — обновяването струва празен 304.
2. Търсене, страниране и честни общи бройки
curl -sS -H "X-API-Key: $KEY" --compressed \
"$API/api/search?brand=bmw&fuel=Diesel&year_from=2018&sort=price_low&limit=50&page=1"- Страниране. Изберете един запис и се придържайте към него —
page+page_sizeилиoffset+limit. Смесването им е400. Обхождайте доtotal_pages;totalна филтрираното търсене и редовете му вече съвпадат, така че няма да попаднете на къси страници. - Преброяването е скъпата половина. Ако обхождате поток, вместо да показвате брой страници, изпращайте
include_total=falseи го пропуснете изцяло. Ако ви трябва само числото, изпратетеcount_only=trueи няма да получите редове. - Пазете
site_name+auction_id_str, никога самоauction_id— ID на japan надвишават 2^53.
# „Колко дизелови BMW има?“ — едно евтино извикване, без редове.
curl -sS -H "X-API-Key: $KEY" \
"$API/api/search?brand=bmw&fuel=Diesel&count_only=true" | jq .total3. Отваряне на една кола: детайли, актуално наддаване, снимки
Една заявка връща спецификацията, състоянието и галерията заедно:
curl -sS -D headers.txt -H "X-API-Key: $KEY" --compressed \
"$API/api/auction/openlane/11409652" -o car.jsonСлед това разклонете по три неща, в този ред:
live_price има -> това Е текущото наддаване; покажете го
live_price_pending има -> прочетете още веднъж след ~2 с, после спрете
нито едното -> цената от цикъла е цената; не опитвайте отново
is_blind: true -> никога няма да има цена. Покажете estimated_value_eur,
отбелязано като оценка на аукционната къща.
details_pending: t -> vehicle_details още го няма. Прочетете отново според
краткия max-age в отговора; междувременно покажете останалото.
vault_gallery.pending > 0 -> идват още снимки. Проверявайте на max-age=10.Адресите на снимките са пътища, затова ги свържете с базата:
jq -r '.auction.vault_gallery.images[] | .served_url // .remote_url' car.json \
| sed "s|^/|$API/|"Не ви трябва и /api/auction-images — vault_gallery е същото тяло, вградено. Използвайте отделния маршрут само когато искате само галерията.
4. Изберете отстъпките, после изчислете вноса
С правото за полета market_reference топ офертите съдържат референцията, използвана за оценката им:
curl -sS -H "X-API-Key: $KEY" \
"$API/api/top-offers?site=openlane&min_savings_pct=20&sort=savings&limit=10"Вземете една и изчислете крайната ѝ цена. Прочетете is_margin от отговора с детайли и изпратете източника, така че моделът на таксите да съвпада с този, който е оценил обявата:
curl -sS -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"price":9000,"site_name":"openlane","origin":"DE","destination":"BG","is_margin":false}' \
"$API/api/calculator/calculate" | jq .breakdown.estimated_totalСравнете тази крайна сума с пазара на дребно, а не с цената на лота:
curl -sS -H "X-API-Key: $KEY" \
"$API/api/cars-bg-market?brand=BMW&model=320d&year=2019&flex=1" \
| jq '{n: .snapshot.listing_count, median: .snapshot.median_price_eur}'Проверете listing_count, преди да се доверите на медианата. Пазарните снимки не са включени по подразбиране за нов ключ — поискайте ги.
5. Проследяване на една кола във времето
Движението на цената на лот, който наблюдавате:
curl -sS -H "X-API-Key: $KEY" \
"$API/api/auction/openlane/11409652/price-history" \
| jq '.history[] | {observed_at, current_price, changed_fields}'И животът ѝ преди тази обява, по VIN — това показва кола, минала през търг повече от веднъж:
curl -sS -H "X-API-Key: $KEY" \
"$API/api/vin/WBA8E9G50GNU12345/history" \
| jq '.auctions[] | {site_name, last_seen_at, mileage, public_price_eur, archived}'Историята по VIN не е включена по подразбиране за нов ключ — поискайте я. event_type в историята на цените е initial, baseline или change — няма стойност price_change.
6. Евтино огледално копие на целия поток
За да поддържате синхронизирано локално копие, а не за да отговорите на заявка:
# Без филтри = без ограничение на дълбочината. Обходете с максималния размер на страницата.
curl -sS -H "X-API-Key: $KEY" -H "Accept-Encoding: gzip" --compressed \
"$API/api/search?limit=100&offset=0&include_total=false"Четири неща го правят с порядък по-евтино:
- 1
--compressed— около една осма от байтовете. - 2
include_total=false— преброяването е скъпата половина на търсенето. - 3Пазете
ETagна всяка страница и изпращайтеIf-None-Matchпри повторното обхождане; непроменените страници отговарят с304без тяло. - 4Не разширявайте всяка карта. Зареждайте детайли само за редове, чийто
last_changed_atсе е променил или които реално показвате.
Резултатите от търсенето винаги са с цени от цикъла, никога с актуални цени. Това ги прави достатъчно бързи за страниране — вижте какво остава с цени от цикъла.