Hejt na produktová data dodavatelů

Posted 18. 09. 2016 / By Petr Soukup / Eshopy

Zhruba třetina dodatelů, které řešíme, nemá vůbec žádný export dat. Druhá třetina export má, ale z různých důvodů je s ním více práce, než by bylo nutné. Sepsal jsem pro vás některé unikátní perličky i typické problémy, které řešíme v ShopAPI pořád dokola.

"XML klidně vyrobíme, není prolém"

  • "Klidně si poradíme s vaším CSV, ale kdyby bylo třeba XML, bylo by to ještě lepší"
  • "Není problém, připravíme vám XML feed"

O týden později dorazilo toto:

<?xml version="1.0" encoding="UTF-8"?>
<feed><![CDATA[
kód;cena
D658;651.5
D8574;568
D669;655
D875;600
]]></feed>

Struktura horkou jehlou

Spočítal jsem, že aktuálně 28 zapojených dodavatelů v XML uvádí obrázky tímto způsobem:

<ITEM>
    <IMGURL>http://abc/1.jpg</IMGURL>
    <IMGURL1>http://abc/1.jpg</IMGURL1>
    <IMGURL2>http://abc/1.jpg</IMGURL2>
    <IMGURL3>http://abc/1.jpg</IMGURL3>
    <IMGURL4>http://abc/1.jpg</IMGURL4>
</ITEM>

Problém tohoto zápisu je, že nelze jednoduše validovat vstupní data. Pokud si připravíme XSD, tak se do něj musí dát preventivně 20 řádků navíc, kdyby náhodou nějaký produkt měl 24 obrázků. Tento zápis přitom nemá žádný důvod. Kdyby se jen opakovalo \<IMGURL>, bude to fungovat zcela stejně.

Zabezpečení feedu

Spousta dodavatelů omezuje přístup k feedům podle IP adresy. Tím ale blokují použití v cloudu - v něm nemáte (a nechcete mít) stálou IP, ale fungujete paralelně z několika adres, které se ještě průběžně mění.

Tento způsob zabezpečení navíc ani pořádně nefunguje. Na sdíleném hostingu má najednou přístup k feedu i dalších 1000 webů na stejném stroji.

Daleko jednodušší je použít URL s hashem (/feed-sd5d4g4s44f44f45s4f45b5h7r.xml) a nebo standardní HTTP auth - funguje všude, je jednoduchý na implementaci na obou stranách a nevytváří další omezení.

Varianty

Srovnávače zboží zavedly u XML tento zápis:

<SHOP>
    <SHOPITEM>
        <ITEM_ID>1</ITEM_ID>
        <ITEMGROUP_ID>G1</ITEMGROUP_ID>
        <PRODUCT>Červené lodičky 34</PRODUCT>
    </SHOPITEM>
    <SHOPITEM>
        <ITEM_ID>2</ITEM_ID>
        <ITEMGROUP_ID>G1</ITEMGROUP_ID>
        <PRODUCT>Červené lodičky 35</PRODUCT>
    </SHOPITEM>
    <SHOPITEM>
        <ITEM_ID>3</ITEM_ID>
        <ITEMGROUP_ID>G1</ITEMGROUP_ID>
        <PRODUCT>Červené lodičky 36</PRODUCT>
    </SHOPITEM>
</SHOP>

Je to zápis praktický pro srovnávače, ale nepoužitelný pro eshopy - zápasíme s tím u většiny dodavatelů. U eshopů totiž nechcete zobrazovat každou velikost boty jako samostatný produkt a odkazovat na další velikosti - chcete mít třeba roletku s výběrem. V tomto případě toho ale není jak jednoduše dosáhnout. Je proto potřeba složitě analyzovat názvy produktů, vyzobávat z nich barvy/velikosti a převádět je na systematičtější zápis.

U tohoto příkladu je alespoň označeno, jaké produkty k sobě patří, ale ani to není pravidlem. Typičtější je, že jsou všechny varianty vysypané jako samostatné položky a musíme sami vymyslet, jak je k sobě sdružit.

Produkty navíc nelze zpracovávat jako proud dat jeden za druhým - musí se držet v paměti celý feed a to u velkých dodavatelů zbytečně zvyšuje náročnost zpracování.

Při přidávání nového dodavatele tento problém zabere vždy nejvíc času.

Nevalidní XML

Poměrně často také řešíme navalidní XML. Například neescapované HTML tagy, ampersand v názvu atd. Stále častěji se také objevují nezpracovatelné UTF sekvence. Nemám vůbec ponětí jak to vzniká, ale občas se v popisu nějakého produktu objeví netisknutelný znak, který XML parser nědokáže zpracovat. Podezřívám nějaké kopírování z Wordu do zmateného WYSIWYGu.

Pomalý hosting

Feed s 10 000 položkami zvládáme zpracovat pod jednu sekundu - pokud nepočítáme stahování feedu a obrázků. Stáhnout 10 000 obrázků totiž může trvat klidně 5-6 hodin. Z naší strany jsme to zkoušeli zrychlit paralelním stahováním, ale to akorát web dodavatele úplně zablokovalo, takže tuhle cestu jsme vzdali.

Prapůvodně jsme v ShopAPI u obrázků uváděli URL obrázků přímo u dodavatele, ale toto byl jeden z důvodů, proč je raději kopírujeme do vlastní CDN. Kromě zrychlení tím navíc rovnou můžeme vyloučit i neplatné obrázky.

Změny struktury feedu

Během jednoho týdne dojde v průměru 10x ke změně formátu nějakého dodavatele. V lepším případě přidají do feedu nový atribut, v horším úplně změní feed a je potřeba napojení celé předělat.

Dokonce jsou i experti, kteří mění strukturu feedu každý týden. Zřejmě aby drželi odběratele ve střehu.

Neztrácejte čas

Pojďme se domluvit, že s takovými problémy nebudete ztrácet čas. My se s nimi potrápíme v ShopAPI a vy už nemusíte. Třeba nakonec i dodavatele naučíme, jak svým odběratelům můžou usnadnit život :)



O blogu
Blog o provozování eshopů a technologickém zázemí.
Aktuálně řeším hlavně cloud, bezpečnost a optimalizaci rychlosti.

Rozjíždím službu pro propojení eshopů s dodavateli.