← Zpět na přehled

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:

  1. Odstraní se prefix Kategorie >
  2. Přidá se ACI jako kořen
  3. Pro každou cestu se emitují všechny mezistupně: ACI, ACI/A, ACI/A/B, ACI/A/B/C
  4. 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>