← Zpět na přehled

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é:

  • status se vrací velkými písmeny ("SUCCESS", ne "success").
  • Výchozí kategorie produktu je pole id_default_groups (množné číslo), ne id_default_group.
  • images je pole objektů {"name", "path", "mtime"}, ne prosté URL stringy — použije se path.

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).