H&M API: zboží, ceny v Kč a velikosti z českého e-shopu H&M v JSON
Veřejné API ke svému katalogu H&M vývojářům nenabízí. Tohle rozhraní čte český e-shop H&M (www2.hm.com/cs_cz) tak, jak ho vidí nakupující: český název zboží, cenu v korunách, při slevě i původní cenu, členskou cenu H&M jako samostatné číslo, všechny barvy, velikosti skladem, složení materiálů, pokyny k praní a hodnocení. Pro Česko se ke každému volání přidává `"country": "cz"`; hledá se česky, tedy „zimní bunda“, ne „winter jacket“. Dodavatelům, franšízovým partnerům ani členům H&M s vlastním účtem neposlouží: nic neobjednává, k žádnému účtu se nepřihlašuje a do H&M nic neposílá. Čte jen veřejný katalog.
Endpointy
| endpoint | Co se vrací | Povinné |
|---|---|---|
| search | Hledání podle slova: cena, původní cena a sleva v procentech, pokud běží akce, členská cena zvlášť, barvy, velikosti s příznakem skladem, značka a kategorie. Řazení podle novinek nebo ceny, filtry oddělení, barvy a materiálu, 36 řádků na stránku (až 72). | query |
| product/detail | Celý artikl podle kódu nebo adresy: popis, ceny, složení po částech oděvu (vrchový materiál, vatování, podšívka), recyklované materiály, pokyny k praní, každá velikost se stavem skladem a „posledních pár kusů“, hodnocení a počet recenzí a všechny ostatní barvy téhož výrobku s vlastními cenami a velikostmi. | article_code |
| category | Všechny výrobky jedné stránky kategorie (oddělení, typ zboží, výprodej); každý řádek má stejná pole jako výsledek hledání. Stránkování a řazení jako na webu. | vše volitelné |
| search/suggest | Návrhy z vyhledávacího pole H&M pro rozepsané slovo, v češtině. | query |
| product/availability | Aktuální dostupnost velikostí pro všechny barvy jednoho výrobku: co se dá objednat a co H&M označuje jako poslední kusy. Malé volání vhodné na hlídání skladu. | article_code |
Každé volání se účtuje v kreditech. Neúspěšná a blokovaná volání jsou zdarma.
Funkční příklad
„zimní bunda“ dala 458 výsledků; na první stránce 36 řádků, většinou dětské bundy, a ve slevě jen jedna: vatovaná bunda 1170400013 za 229 Kč místo 399 Kč (−43 %). Sleva patří barvě, ne výrobku: každá barva má vlastní `article_code` (výrobek 1170400 + kód barvy) a ostatní barvy skladem stály 399 Kč. Pozor i na počet barev: řádek z hledání uvádí `color_count: 6` a v `colors` bylo právě šest barev, které byly skladem, kdežto `product/detail` vrátil všech 12 variant včetně vyprodaných; mezi nimi byla i druhá barva za 229 Kč, už bez jediné velikosti skladem.
curl -X POST https://api.reefapi.com/hm/v1/search \
-H "x-api-key: VAS_API_KLIC" \
-H "content-type: application/json" \
-d '{"query": "zimní bunda", "country": "cz"}'{
"ok": true,
"data": {
"results": [
{
"article_code": "1262219011",
"product_code": "1262219",
"name": "Vodoodpudivá vatovaná bunda",
"brand": "H&M",
"url": "https://www2.hm.com/cs_cz/productpage.1262219011.html",
"price": 629.0,
"regular_price": null,
"on_sale": false,
"member_price": null,
"price_formatted": "629 Kč",
"currency": "CZK",
"color_name": "Bílá/květiny",
"color_count": 5,
"sizes_in_stock": 5,
"main_category": "kids_girls_clothing_jacketscoats_jackets"
},
...
{
"article_code": "1170400013",
"product_code": "1170400",
"name": "Vodoodpudivá vatovaná bunda",
"brand": "H&M",
"price": 229.0,
"regular_price": 399.0,
"on_sale": true,
"discount_percent": 43,
"member_price": null,
"price_formatted": "229 Kč",
"currency": "CZK",
"color_name": "Námořnická modř",
"color_count": 6,
"sizes": [
{ "size_code": "006", "label": "92 (1½-2Y)", "in_stock": true },
{ "size_code": "007", "label": "98/104 (2-4Y)", "in_stock": false },
...
],
"sizes_in_stock": 2,
"main_category": "kids_boys_clothing_jacketscoats_jackets"
},
...
],
"count": 36,
"total_results": 458,
"total_pages": 13,
"has_more": true,
"matched_query": null,
"related_searches": ["bunda"],
"country": "cz",
"language": "cs",
"locale": "cs_cz",
"currency": "CZK"
},
"meta": { "record_count": 36, "country": "cz", "charged_credits": 1, "cache_hit": false, "mode": "live" }
}Vlastní scraper na hm.com: co se ukázalo při stavbě
Každý řádek ve výsledcích H&M nese seznam cen, ne jednu cenu: běžnou, akční pro všechny a členskou. Na českém trhu to při stavbě enginu ukázaly šaty 1342450007: 379 Kč běžně, 299 Kč pro členy. Kdo vezme nejnižší číslo ze seznamu, uloží jako cenu na regálu tu, kterou zaplatí jen člen; na francouzském trhu by se to u dotazu „jean“ stalo v 15 řádcích z 36. Proto je tady `price` cena pro každého a `member_price` samostatné pole.
Sedmimístný kód výrobku z adresy není stránka: `productpage.1357224.html` vrátil HTTP 500. Stránku má jen desetimístný kód artiklu (výrobek + barva); engine sedmimístný kód nejdřív dohledá ve vyhledávání. A pole se skladem nenese počet kusů, ale kód stavu: ve 144 změřených řádcích se hodnota 1 neobjevila ani jednou. Proto tu je jen `in_stock` a příznak posledních kusů.
Některé parametry H&M přijme a mlčky nepoužije: s `categoryId` zůstal počet výsledků stejný (2003 = 2003), s `priceRange=10-20` také, a filtr velikosti vrátil nulu. Skript tak vypadá, že filtruje, a nefiltruje. Engine nabízí jen filtry, u kterých se při stavbě změřilo, že výsledky opravdu mění; na českém trhu ale `sale_only` teď vrací nulu, viz omezení níže.
Ceny se v H&M liší barvu od barvy a u každé můžou platit tři různá čísla. Kdo je chce porovnávat déle než pár dní, potřebuje u každého uloženého řádku vědět, kterou z těch tří cen má a ke které barvě patří.
Omezení a poctivé poznámky
- Nejde o službu H&M: rozhraní je neoficiální, H&M ho nevydalo a s firmou nemáme partnerskou smlouvu.
- Bez `"country": "cz"` jde dotaz na americký e-shop H&M s cenami v dolarech.
- Filtr `sale_only` na českém trhu nefunguje: 27. 10. vrátil u „zimní bunda“, „bunda“ i „šaty“ 0 výsledků, přestože běžné hledání „zimní bunda“ zlevněnou bundu obsahovalo. Takové volání skončí jako úspěšné a 1 kredit se za něj strhne. Zlevněné zboží proto hledejte bez filtru a poznáte ho podle `on_sale`, `regular_price` a `discount_percent`.
- Hledání vrací i zboží dalších značek skupiny H&M: u „lněná košile“ bylo z 36 řádků 16 COS, 13 H&M, 4 ARKET a 3 & Other Stories. Kdo chce jen H&M, filtruje podle pole `brand`.
- Členská cena se objeví jen tam, kde ji H&M u zboží vypíše; v našich dotazech z 27. 10. („lněná košile“, „zimní bunda“, 72 řádků) nebyla ani jedna.
- Sklad je jen příznak (`in_stock`, `few_left`), ne počet kusů. `product/detail` obsahuje nejvýš 10 recenzí, které jsou přímo na stránce zboží (`reviews_sample`), ne celý seznam.
- Ne každé pole je vždy vyplněné: u bundy z příkladu přišel `breadcrumb` prázdný a `country_of_production` null. Poznámka o dopravě (`delivery_note`) je text H&M („poplatek za dopravu od 39 Kč do 80 Kč“), ne spočítaná cena dopravy.
- Za `search`, `search/suggest` a `product/availability` se platí 1 kredit, za `product/detail` a `category` 2 kredity (u kategorie za každou stránku).