ACI
Dodavatel autodoplňků a motodoplňků.
Přístupy
| Parametr | Hodnota |
|---|---|
| Login | 34ingzbwe |
| Heslo | vc*RT-1C6 |
| Autentizace | HTTP Basic Auth |
| Base URL | http://aci.cz/i6ws/Default.asmx/GetResult |
Feed produktů
URL: ?resultType=ACIShopItem
Doporučená frekvence: max 1× denně → nastaveno na 12 hodin
Zdrojová struktura
<SHOP>
<SHOPITEM>
<ID>314527</ID>
<CODE>0100X15</CODE>
<EAN>8596303042738</EAN> <!-- nemusí být přítomno -->
<NAME>gumový koberec pro středový tunel</NAME>
<ITEM_TYPE>product</ITEM_TYPE> <!-- filtrujeme pouze "product" -->
<PRICE>151.00</PRICE> <!-- nákupní cena bez DPH -->
<VAT>21.0000</VAT>
<PRICE_VAT>182.71</PRICE_VAT>
<AVAILABILITY>skladem</AVAILABILITY> <!-- "skladem" nebo "není skladem" -->
<CATEGORIES>
<CATEGORY STRID="...">Kategorie > Škoda > Škoda OCTAVIA II > vnitřní část karoserie > koberce</CATEGORY>
<CATEGORY STRID="...">Kategorie > univerzální díly > příslušenství a výbava > uni koberečky</CATEGORY>
</CATEGORIES>
<IMAGES>
<IMAGE IMGU="2018-10-08T08:42:00">http://www.aci.cz/img.asp?stiid=314527</IMAGE>
</IMAGES>
<TEXT_PROPERTIES>
<TEXT_PROPERTY>
<NAME>Koberečky, vložky kufru</NAME>
<VALUE>Univerzální</VALUE>
</TEXT_PROPERTY>
</TEXT_PROPERTIES>
</SHOPITEM>
</SHOP>
Mapování polí
| Výstupní pole | Zdroj |
|---|---|
CODE / PRODUCT_CODE |
CODE |
EAN |
EAN (pokud je přítomno) |
PRODUCT |
NAME |
PRICE |
PRICE — již bez DPH |
VAT |
VAT jako celé číslo |
HIDDEN |
vždy Y |
CATEGORY |
viz níže |
IN_STORE |
AVAILABILITY == "skladem" → 1, jinak 0 |
PRODUCER |
Brand z ceníku ACIPriceListOrd (cross-reference) |
PHOTOS/PHOTO |
každý IMAGES/IMAGE |
PARAMETERS/PARAMETER |
každý TEXT_PROPERTIES/TEXT_PROPERTY |
Kategorie
Každý produkt může mít více zdrojových kategorií. Cesta každé kategorie je ve formátu Kategorie > A > B > C.
Transformace:
- Odstraní se prefix
Kategorie > - Přidá se
ACIjako kořen - Pro každou cestu se emitují všechny mezistupně:
ACI,ACI/A,ACI/A/B,ACI/A/B/C - Duplikáty ze všech kategorií se sloučí
Ceník pro značku výrobce
Kromě ACIShopItem se při každém refreshi produktů stahuje také ACIPriceListOrd, ze kterého se čte atribut Brand a cross-referencuje k odpovídajícímu Code.
Feed dostupnosti
URL: ?resultType=ACIStoItemQtyFree
Doporučená frekvence: max 1× za 15 minut → nastaveno na 15 minut
Bez parametrů vrací pouze artikly aktuálně skladem.
Zdrojová struktura
<Result>
<StoItem Id="3410" Code="1734803" EAN="8596303024550" QtyFreeIs="1" Qty="1" />
<StoItem Id="3253" Code="43002042" Avail="10" MoreThan="1" QtyFreeIs="1" Qty="2" />
</Result>
Všechna data jsou ve XML atributech (ne elementech).
| Atribut | Popis |
|---|---|
Code |
kód produktu |
EAN |
EAN (nemusí být přítomno) |
Qty |
množství skladem (shora omezeno maximem ACI) |
QtyFreeIs |
skladem 0/1 |
MoreThan |
reálné množství > Qty |
Avail |
dostupnost ve dnech (pokud není skladem) |
Mapování polí
| Výstupní pole | Zdroj |
|---|---|
CODE / PRODUCT_CODE |
Code atribut |
EAN |
z cache produktového feedu; fallback na EAN atribut |
IN_STORE |
Qty atribut |
PRICE |
z cache produktového feedu (PRICE) |
Harmonogram
| Feed | Frekvence |
|---|---|
| Produkty | 12 hodin |
| Dostupnost | 15 minut |
Původní xslt z eshopu
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns="https://www.pneuvranik.cz"
xmlns:n="https://www.pneuvranik.cz"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<SHOP>
<xsl:for-each select="n:SHOP/n:SHOPITEM">
<xsl:variable name="in_store">
<xsl:value-of select="n:AVAILABILITY" />
</xsl:variable>
<xsl:variable name="vat">
<xsl:value-of select="n:VAT" />
</xsl:variable>
<SHOPITEM>
<CODE>
<xsl:value-of select="n:ib_cislo_zbozi"/>
</CODE>
<PRODUCT_CODE>
<xsl:value-of select="n:ib_cislo_zbozi"/>
</PRODUCT_CODE>
<EAN>
<xsl:value-of select="n:EAN"/>
</EAN>
<PRODUCT>
<xsl:value-of select="n:PRODUCT"/>
</PRODUCT>
<DESCRIPTION>
<xsl:value-of select="n:DESCRIPTION_DETAIL"/>
</DESCRIPTION>
<SHORT_DESCRIPTION>
<xsl:value-of select="n:DESCRIPTION"/>
</SHORT_DESCRIPTION>
<PRICE>
<xsl:value-of select="(n:PRICE_VAT) div (($vat + 100) div 100)"/>
</PRICE>
<VAT>
<xsl:value-of select="$vat"/>
</VAT>
<HIDDEN>Y</HIDDEN>
<CATEGORY>Pneu Vraník</CATEGORY>
<xsl:call-template name="createCategory">
<xsl:with-param name="path" select="n:CATEGORYTEXT"/>
<xsl:with-param name="currentPath" select="''"/>
</xsl:call-template>
<IN_STORE>
<xsl:value-of select="$in_store"/>
</IN_STORE>
<PRODUCER>
<xsl:value-of select="n:MANUFACTURER"/>
</PRODUCER>
<PARAMETERS>
<xsl:if test="n:CENA_KOSTRY">
<PARAMETER name="Cena kostry">
<xsl:value-of select="n:CENA_KOSTRY"/>
</PARAMETER>
</xsl:if>
<xsl:if test="n:INDEX_NOSNOSTI">
<PARAMETER name="Index nosnosti">
<xsl:value-of select="n:INDEX_NOSNOSTI"/>
</PARAMETER>
</xsl:if>
<xsl:if test="n:INDEX_RYCHLOSTI">
<PARAMETER name="Index rychlosti">
<xsl:value-of select="n:INDEX_RYCHLOSTI"/>
</PARAMETER>
</xsl:if>
<xsl:if test="n:NAZEV_DEZENU">
<PARAMETER name="Název dezénu">
<xsl:value-of select="n:NAZEV_DEZENU"/>
</PARAMETER>
</xsl:if>
<xsl:if test="n:PROFIL">
<PARAMETER name="Profil">
<xsl:value-of select="n:PROFIL"/>
</PARAMETER>
</xsl:if>
<xsl:if test="n:RAFEK">
<PARAMETER name="Ráfek">
<xsl:value-of select="n:RAFEK"/>
</PARAMETER>
</xsl:if>
<xsl:if test="n:SIRKA">
<PARAMETER name="Šířka">
<xsl:value-of select="n:SIRKA"/>
</PARAMETER>
</xsl:if>
</PARAMETERS>
</SHOPITEM>
</xsl:for-each>
</SHOP>
</xsl:template>
<xsl:template name="createCategory">
<xsl:param name="path"/>
<xsl:param name="currentPath"/>
<!-- Check if there is more to process in the path -->
<xsl:choose>
<xsl:when test="contains($path, ' | ')">
<!-- Process up to the next delimiter -->
<CATEGORY>
<xsl:value-of select="concat('Pneu Vraník/', $currentPath, substring-before($path, ' | '))"/>
</CATEGORY>
<!-- Recursive call to process the remainder of the path -->
<xsl:call-template name="createCategory">
<xsl:with-param name="path" select="substring-after($path, ' | ')"/>
<xsl:with-param name="currentPath" select="concat($currentPath, substring-before($path, ' | '), '/')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!-- Process the final section of the path -->
<CATEGORY>
<xsl:value-of select="concat('Pneu Vraník/', $currentPath, $path)"/>
</CATEGORY>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>