Motopoint
Dodavatel moto/čtyřkolkových doplňků (Motopoint a.s.). Feed typu MWS Light — pět samostatných paginovaných JSON endpointů (bez vazby na motorky/modely, na rozdíl od "MWS Power").
Přístup
Feed je omezen na konkrétní IP adresy — Motopoint je povolil pro ostrá data:
| IP | Účel |
|---|---|
193.179.120.25 |
Klientská IP (Zbyněk Kincl) |
85.207.218.182 |
IP serveru |
Implementace byla ověřena živě přes ssh cv (server je na whitelistu, vývojový stroj
ne). Oproti Motopointově dokumentaci polí (viz přílohy) se realita liší ve třech bodech —
všechny jsou v kódu ošetřené:
statusse vrací velkými písmeny ("SUCCESS", ne"success").- Výchozí kategorie produktu je pole
id_default_groups(množné číslo), neid_default_group. imagesje pole objektů{"name", "path", "mtime"}, ne prosté URL stringy — použije sepath.
Výstupy
| Feed | URL výstupu | Účel |
|---|---|---|
| Zboží (produkty) | /motopoint/products |
Plný katalog — názvy, popisy, kategorie, ceny, obrázky, parametry |
| Dostupnost | /motopoint/availability |
Časté aktualizace skladu (stock_count) a ceny (prices) |
Zdrojové endpointy (MWS Light)
Base URL: http://ctyrkolky-vrchlabi.mwsonline.cz/mws-api
| Tabulka | URL | Stránkování | Poznámka |
|---|---|---|---|
groups |
/groups |
ne (celý strom najednou) | Strom kategorií, vnořeno přes childs |
groups_goods |
/groups_goods |
5 000 záznamů / stránka | Vazba kategorie ↔ produkt (M:N) |
products |
/products |
5 000 záznamů / stránka | Plné katalogové informace |
prices |
/prices |
pravděpodobně stejně jako products | Jen ceny — rychlejší než products |
stock_count |
/stock_count |
20 000 záznamů / stránka | Sklad Motopoint + info o externím dodavateli |
Stránkování: první stránka je holá URL endpointu, další stránky /mws-api/<tabulka>/<číslo>
(např. /mws-api/products/25). Konec je signalizován prázdným polem data.
Odpověď je JSON obálka {"status": "SUCCESS", "data": [...]} — chybová odpověď má tvar
{"status": "ERROR", "message": "..."} (ověřeno živě: bez whitelistované IP endpoint vrací
Account IP "..." does not exist).
Výkon: stránka products (5 000 záznamů) trvá ~25 s, stránka stock_count (20 000
záznamů) ~50 s. Guzzle klient má timeout 900 s (viz AbstractSupplier), takže by to i s
více stránkami mělo v pohodě stíhat, ale je to výrazně pomalejší než ostatní dodavatelé.
Timestampové URL (?from=<unix_timestamp>) pro inkrementální stahování existují u products,
prices a stock_count, ale tento import zatím vždy stahuje všechny stránky od začátku.
Pole (ověřeno živě přes ssh cv)
groups — strom kategorií:
id, name, is_universal, category_1, category_2, order, childs (vnořené podřazené skupiny).
groups_goods — vazba kategorie/produkt:
id, id_groups, id_goods, updated. (ověřeno, přesně podle dokumentace)
products — id (hlavní klíč napříč všemi tabulkami!), name_with_vehicle,
name_without_vehicle, url, id_default_groups (množné číslo — dokumentace uváděla
id_default_group), stock_number (interní kód, nezobrazovat), is_variant,
stock_count/stock_external/expected_delivery (redundantní kopie skladu přímo v produktu —
nepoužito, viz cross-reference na stock_count endpoint níže), desc, description_long
(HTML), id_producer, producer, weight, ean, mpn, oem_numbers, other_bar_codes,
vat, discontinued (Y/N, aktuálně nefiltrováno), attributes (pole objektů
{"name", "value"}), icon, flags, files, images (pole objektů
{"name", "path", "mtime"} — použije se path, ne prosté URL stringy), videos, sets,
img (hlavní obrázek, string), img_mtime, variants, recommends, price_retail (bez DPH),
price_retail_vat, price_dealer, price_without_discount.
stock_count — id, in_storage (sklad Motopoint), stock_external (text o dodací době
externího dodavatele), expected_delivery. (ověřeno; central_stock z dokumentace se v živé
odpovědi neobjevilo)
prices — id, price_retail, price_retail_vat, price_dealer, price_without_discount.
(ověřeno, přesně podle dokumentace)
Obálka odpovědi je vždy {"status": "SUCCESS", "data": [...]} (velkými písmeny) — kód porovnává
case-insensitive.
Mapování polí (products.xml)
| Výstupní pole | Zdroj |
|---|---|
CODE / PRODUCT_CODE |
id — jediný identifikátor, který Motopoint dokumentuje jako stabilní napříč všemi tabulkami. stock_number je interní kód a nesmí se zobrazovat zákazníkům. |
EAN |
ean |
PRODUCT |
name_without_vehicle, fallback name_with_vehicle |
DESCRIPTION |
description_long, fallback desc |
SHORT_DESCRIPTION |
desc |
PRICE |
price_retail (bez DPH) |
VAT |
vat jako celé číslo |
HIDDEN |
vždy Y |
CATEGORY |
viz níže |
IN_STORE |
cross-reference na stock_count podle id (endpoint products sklad neobsahuje) |
PRODUCER |
producer |
PHOTOS/PHOTO |
img (hlavní) + images[].path |
PARAMETERS/PARAMETER |
attributes |
Kategorie
groups je strom (přes childs), takže cesta ke kořeni jde přímo vyčíst rekurzivním průchodem
— není potřeba dopočítávat rodiče. Pro každý produkt se breadcrumby staví ze všech skupin,
ke kterým je přiřazen přes groups_goods (M:N vazba), plus jeho id_default_groups (pro
jistotu, kdyby v groups_goods chyběl). Cesty se sloučí a deduplikují, kořen je vždy Motopoint
(stejný vzor jako u ACI — ACI/A/B/C).
Zdroj dat pro dostupnost
| Pole zdroje | Výstup | Poznámka |
|---|---|---|
stock_count.id |
(klíč pro párování) | Shodné s CODE |
stock_count.in_storage |
IN_STORE |
Živý dotaz při každém refreshi |
prices.price_retail |
PRICE |
Živý dotaz — Motopoint prices endpoint je dokumentovaný jako rychlejší varianta určená přímo pro update cen |
cache products.xml → EAN |
EAN |
Z mezipaměti posledního produktového feedu |
Emitují se jen položky, které existují v mezipaměti products.xml.
Harmonogram
| Feed | Frekvence |
|---|---|
| Produkty | 12 hodin |
| Dostupnost | 15 minut |
(Stejné jako u ostatních dodavatelů — Motopoint žádnou konkrétní frekvenci nepředepsal.)
Přílohy (testovací XLSX od Motopoint)
| Soubor | Náhled v prohlížeči | Stáhnout XLSX |
|---|---|---|
| MWS Light — JSON (EN) | /docs/motopoint/attachment/mws-light-json-en | /docs/motopoint/attachment/mws-light-json-en/download |
| MWS Power — test (CZ) | /docs/motopoint/attachment/mws-power-test-cz | /docs/motopoint/attachment/mws-power-test-cz/download |
Soubory leží ve složce docs/feeds/ v repozitáři; v prohlížeči se načítají přes odkazy výše
(náhled = všechny listy jako tabulky). Obsahují úplný popis polí pro tabulky groups,
groups_goods, products, stock_count (Light i Power varianta).