H&M API: produse, prețuri și mărimi de pe H&M România în JSON
H&M nu oferă un API public pentru dezvoltatori. Interfața de aici citește magazinul online H&M România așa cum îl vede orice client — denumire, preț în lei, reducere, culori, mărimi disponibile și compoziție — și returnează totul în format JSON. Nu este o integrare pentru furnizori sau parteneri H&M și nu are acces la vreun cont de client: este partea cumpărătorului, catalogul public.
Endpointuri
| endpoint | Ce returnează | Obligatorii |
|---|---|---|
| search | Căutare după cuvânt, în limba română: prețul plătit, prețul dinaintea reducerii, prețul pentru membri separat, culori și mărimi disponibile. Sortare după noutăți sau preț, filtre de departament, culoare și material. | query |
| product/detail | Articolul complet după cod sau URL: descriere, compoziție pe părți ale produsului, materiale reciclate, instrucțiuni de îngrijire, fiecare mărime cu disponibilitatea ei și marcajul „puține bucăți”, nota din recenzii și toate celelalte culori cu prețurile lor. | article_code |
| category | Toate produsele unei pagini de categorie (un departament, un tip de produs, pagina de reduceri), paginate și sortate. | toate opționale |
| search/suggest | Sugestiile din caseta de căutare H&M pentru ce a tastat clientul. | query |
| product/availability | Disponibilitatea pe mărimi, live, pentru toate culorile unui produs: ce se poate comanda și ce H&M marchează cu puține bucăți rămase. | article_code |
Fiecare apel se taxează în credite. Apelurile eșuate și blocate sunt gratuite.
Exemplu funcțional
La un produs redus, price este ce plătește oricine acum, regular_price prețul dinainte, iar member_price (prețul pentru membri) e un câmp separat, null când nu există. Cine ia un singur „preț” amestecă cele trei și compară lucruri diferite.
curl -X POST https://api.reefapi.com/hm/v1/product/detail \
-H "x-api-key: CHEIA_TA" \
-H "content-type: application/json" \
-d '{"article_code": "1325446002", "country": "ro"}'{
"ok": true,
"data": {
"product": {
"article_code": "1325446002",
"name": "Jachetă scurtă din denim",
"price": 114.99,
"regular_price": 189.99,
"discount_percent": 39,
"member_price": null,
"currency": "RON",
"composition": [{ "materials": [{ "name": "Bumbac", "percent": 81 }, { "name": "Poliester", "percent": 18 }, { "name": "Elastan", "percent": 1 }] }],
"sizes": [
{ "label": "XXS", "in_stock": true, "few_left": true },
{ "label": "XS", "in_stock": false, "few_left": false },
...
],
"rating": 5.0,
"review_count": 1
}
},
"meta": { "record_count": 1, "cache_hit": false, "mode": "live" }
}Scraper pentru H&M: ce nu se vede din prima
La H&M, accesul la pagina de produs nu depinde de IP — nici proxy-urile rezidențiale nu ajută — ci de felul în care se prezintă clientul. E o regulă pe care H&M o poate schimba oricând, iar atunci un scraper se oprește de pe o zi pe alta, fără ca în codul lui să se fi schimbat ceva.
Apoi sunt răspunsurile care par corecte. Un produs care nu mai există nu întoarce 404, ci pagina principală a magazinului, cu cod 200. O pagină de rezultate de după ultima întoarce tot prima pagină. Aici produsul inexistent vine ca NOT_FOUND, iar pagina prea mare ca listă goală cu page_out_of_range.
Pentru o extragere unică de prețuri, un script propriu ajunge și e mai ieftin. Când urmărești reducerile în fiecare zi, costul real e să afli la timp că ceva s-a stricat.
Altă documentație în română
Limite și note oneste
- Nu este API-ul oficial H&M și nu avem niciun parteneriat cu H&M.
- Filtrul sale_only nu funcționează pe piața ro: la „rochie” și „geacă” a întors 0 rezultate, deși căutarea simplă conținea produse reduse (pe piața gb același filtru funcționează). Produsele reduse se recunosc după regular_price și discount_percent.
- H&M corectează singur căutarea: „geacă de iarnă” a devenit „gheată de iarnă” și a întors ghete, iar „geaca de iarna” (fără diacritice) a întors 0 rezultate. Verifică matched_query; un cuvânt simplu ca „geacă” sau „rochie” merge mai sigur decât o expresie.
- Stocul pe mărimi este un indicator (in_stock, few_left), nu un număr de bucăți.
- product/detail include cel mult 10 recenzii, cele afișate pe pagină (reviews_sample), nu lista completă.
- Piața implicită este us: fără country: "ro", cererea ajunge la magazinul H&M din SUA, cu prețuri în dolari.
- Nu păstrăm copii în cache: fiecare apel citește din nou magazinul H&M.