Autovit API: anunțuri de mașini BMW și Volkswagen în JSON
Acoperirea e îngustă și o spunem de la început: motorul citește doar autoturismele BMW și Volkswagen de pe autovit.ro. Pentru aceste două mărci primești căutarea și anunțul complet, cu prețul exact cum l-a pus vânzătorul (în anunțurile măsurate, în euro), anul, kilometrajul, combustibilul și specificațiile din pagina anunțului. Nu e integrarea prin care parcurile auto își importă stocul în Autovit, iar pachetele de anunțuri nu intră în discuție: serviciul nu publică și nu modifică nimic, doar citește ce vede un cumpărător.
Endpointuri
| endpoint | Ce returnează | Obligatorii |
|---|---|---|
| search | Anunțurile de autoturisme pentru o marcă, `bmw` sau `volkswagen`: id-ul anunțului, titlu, preț, monedă, etichetele de preț (TVA inclus, se emite factură), prețul brut și net când apar, an, kilometraj, combustibil. Paginile 1–2; `limit` merge până la 24 de anunțuri pe pagină, iar fără el primești doar 3. | make |
| product/detail | Anunțul complet după `id`-ul din căutare (calea `autoturisme/anunt/…-ID….html`): descriere, specificațiile din pagină (versiune, generație, capacitate cilindrică, putere în CP, cutie de viteze, transmisie, țara de origine, stare, carte de service, eligibil pentru finanțare), dotările pe categorii, fotografiile și profilul public al vânzătorului. | listing_id |
Fiecare apel se taxează în credite. Apelurile eșuate și blocate sunt gratuite.
Exemplu funcțional
Polo-ul de mai jos are 13 450 € cu TVA inclus (`INCLUDE_VAT`), iar `net_price` arată 11 116 € fără TVA; pentru o firmă care deduce TVA-ul, asta e cifra care contează. Tiguan-ul are doar „se emite factură” și niciun preț net. Nu decide după `source_is_gross`: în toate cele 19 rânduri cu `INCLUDE_VAT` pe care le-am măsurat (VW și BMW) a venit `false`. Valorile din `gross_price` și `net_price` sunt text, într-un obiect cu `currencyCode`, exact cum le trimite sursa.
curl -X POST https://api.reefapi.com/autovit/v1/search \
-H "x-api-key: CHEIA_TA" \
-H "content-type: application/json" \
-d '{"make": "volkswagen", "limit": 24}'{
"ok": true,
"data": {
"make": "volkswagen",
"page": 1,
"limit": 24,
"total_results": 4813,
"source_page_rows": 32,
"has_more": true,
"next_page": 2,
"results": [
...
{
"id": "autoturisme/anunt/volkswagen-polo-ver-1-0-tsi-life-ID7HQtFS.html",
"title": "Volkswagen Polo 1.0 TSI Life",
"price": 13450,
"currency": "EUR",
"price_basis": "published_advertised_price",
"price_labels": ["INCLUDE_VAT", "INVOICE_ISSUED"],
"gross_price": { "value": "13450", "currencyCode": "EUR", "__typename": "Money" },
"net_price": { "value": "11116", "currencyCode": "EUR", "__typename": "Money" },
"source_is_gross": false,
"brand": "Volkswagen",
"model": "Polo",
"year": 2022,
"mileage_km": 25811,
"fuel": "Benzina",
"gearbox": null
},
...
{
"id": "autoturisme/anunt/volkswagen-tiguan-ver-2-0-tdi-4mot-dsg-highline-ID7HQff4.html",
"title": "Volkswagen Tiguan 2.0 TDI 4Mot DSG Highline",
"price": 18990,
"currency": "EUR",
"price_basis": "published_advertised_price",
"price_labels": ["INVOICE_ISSUED"],
"gross_price": null,
"net_price": null,
"source_is_gross": true,
"year": 2018,
"mileage_km": 172000,
"fuel": "Diesel",
"gearbox": null
}
]
},
"meta": { "record_count": 24, "cache_hit": false, "mode": "live" }
}Dacă vrei să scrii singur scraperul pentru Autovit
Primul lucru de știut: numărul care apare în datele anunțului nu deschide nicio pagină. Anunțul se identifică prin calea completă, cu codul `ID…` de la final, și pe aceea o întoarcem ca `id`; `source_id` rămâne doar ca informație.
Al doilea: prețul nu e întotdeauna un preț „cash”. Unele descrieri leagă suma afișată de o finanțare sau de alte condiții de cumpărare, de aceea fiecare rând are `price_basis: "published_advertised_price"`. Nici dacă prețul include TVA nu se vede dintr-un singur câmp, iar noi nu calculăm un preț cu TVA din cele două sume; le dăm separat, cu etichetele sursei.
Al treilea: unele câmpuri din pagină sunt criptate. Telefonul și seria VIN apar doar ca token-uri, iar la Polo-ul din exemplu chiar și data primei înmatriculări a venit criptată. Nu le decriptăm și nu le prezentăm drept VIN sau dată.
Toate trei au ceva în comun: datele arată complete și nu apare nicio eroare. Doar că un id numeric salvat în baza ta de date nu duce la niciun anunț, un preț legat de finanțare intră în medie ca preț cash, iar un token criptat ajunge în coloana VIN.
Limite și note oneste
- Serviciul nu vine de la Autovit: nu e API-ul lor oficial și nu lucrăm în parteneriat cu ei.
- Doar BMW și Volkswagen. Orice altă marcă (am încercat `audi`) e respinsă cu `INVALID_PARAM`, nu cu o listă goală.
- Fără filtre de model, an, preț, combustibil sau județ și fără sortare: căutarea întoarce lista mărcii în ordinea site-ului, cu mașini noi și rulate amestecate (3 anunțuri din 24 aveau 3 km la bord).
- Doar paginile 1 și 2. Sursa are 32 de anunțuri pe pagină, iar noi întoarcem cel mult primele 24, deci ajungi la maximum 48 de anunțuri pe marcă, deși `total_results` arăta 4813 pentru Volkswagen și 6131 pentru BMW.
- În căutare `gearbox` a venit `null` la toate cele 48 de rânduri măsurate; cutia de viteze apare în `product/detail`.
- În `product/detail` același anunț are `gross_price: null`, iar etichetele vin ca text de pagină („Se emite factura”). Prețul net apare doar în rândul din căutare.
- Telefonul, seria VIN și uneori data primei înmatriculări sunt criptate de sursă; `vin` vine `null`.
- Nu există cache: prețul și kilometrajul sunt cele de pe autovit.ro din clipa apelului.