← Zpět na přehled

Dodavatel Pneu Vraník

Výstupy

Feed URL výstupu Účel
Zboží (produkty) /pneuvranik/products Plný katalog — názvy, popisy, kategorie, ceny bez DPH, obrázky, parametry pneumatik
Dostupnost /pneuvranik/availability Časté aktualizace skutečného počtu kusů na skladě a ceny

Zdroj dat pro produkty

URL feedu od dodavatele:

https://www.pneuvranik.cz/feed.xml?feedKey=L901ZYRK

Jde o jednoduchý jednofázový XML soubor (struktura SHOP/SHOPITEM), není třeba stahovat více stránek.

Poznámky k transformaci

  • Cena: Zdroj obsahuje cenu s DPH (PRICE_VAT). Cena bez DPH se vypočítá jako PRICE_VAT ÷ (1 + VAT/100).
  • Kategorie: Pole CATEGORYTEXT je odděleno | (např. PNEUMATIKY | Letní pneumatiky | Osobní). Z něj se generují breadcrumb elementy CATEGORY s prefixem Pneu Vraník/.
  • Sklad: Pole ib_interval_skladem — textová hodnota z původního systému (např. 5); přenáší se do IN_STORE beze změny.
  • Parametry: Vyplňují se pouze pole, která mají ve zdroji neprázdnou hodnotu: Cena kostry, Index nosnosti, Index rychlosti, Název dezénu, Profil, Ráfek, Šířka.

Zdroj dat pro dostupnost

Dostupnost se skládá ze dvou zdrojů od dodavatele:

Sklad a EAN

https://www.pneuvranik.cz/Availability.xml

Formát item_list/item:

Pole zdroje Výstup Poznámka
ib_cislo_zbozi CODE, PRODUCT_CODE Primární klíč shodný s produktovým feedem
EAN EAN Přímo ze zdroje
stock_quantity IN_STORE Skutečný počet kusů na skladě

Cena

https://www.pneuvranik.cz/katalog/gcen/gxml.asp

Formát SHOP/SHOPITEM (namespace zbozi.cz). Cena se bere z pole PRICE (bez DPH), klíč je ib_cislo_zbozi.

Pole zdroje Výstup Poznámka
ib_cislo_zbozi (klíč pro párování) Shodný s CODE
PRICE PRICE Cena bez DPH, stahuje se živě při každém refreshi dostupnosti

Položky, které se ve zdroji dostupnosti vyskytují, ale nejsou v produktovém feedu (např. byly odfiltrované), se do výstupu nezahrnou.


Harmonogram stahování

Feed Interval
Produkty 12 hodin
Dostupnost 15 minut

Hlavní produktový feed (feed.xml) je dodavatelem blokován každý den od 7:00 do 16:00 (Europe/Prague) — v tomto okně ho plánovaný cron přeskočí. Feedy pro dostupnost (Availability.xml) a ceny (gxml.asp) jsou dostupné 24/7.

Pokud u blokovaného produktového feedu přesto dojde k odpovědi typu Access denied. Next access available at …, mezipaměť se neaktualizuje a zůstane poslední platná verze.


Původní xslt

Produkty

<?xml version="1.0" encoding="WINDOWS-1250"?>
<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="SHOP/SHOPITEM">
                <xsl:variable name="in_store">
                    <xsl:value-of select="ib_interval_skladem" />
                </xsl:variable>
               <xsl:variable name="vat">
                  <xsl:value-of select="VAT" />
               </xsl:variable>


               <SHOPITEM>
                  <CODE>
                     <xsl:value-of select="ib_cislo_zbozi"/>
                  </CODE>
                  <PRODUCT_CODE>
                     <xsl:value-of select="ib_cislo_zbozi"/>
                  </PRODUCT_CODE>
                  <EAN>
                  	<xsl:value-of select="EAN"/>
               	  </EAN>
                  <PRODUCT>
                     <xsl:value-of select="PRODUCT"/>
                  </PRODUCT>               
                  <DESCRIPTION>
                     <xsl:value-of select="DESCRIPTION_DETAIL"/>
                  </DESCRIPTION>              
                  <SHORT_DESCRIPTION>
                     <xsl:value-of select="DESCRIPTION"/>
                  </SHORT_DESCRIPTION>                 
                  <PRICE>
                     <xsl:value-of select="(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="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="MANUFACTURER"/>
                  </PRODUCER>
                 <PHOTOS>
                   <PHOTO>
						<xsl:value-of select="IMGURL"/>
                   </PHOTO>
                 </PHOTOS>

                  <PARAMETERS>
                      <xsl:if test="CENA_KOSTRY">
                          <PARAMETER name="Cena kostry">
                              <xsl:value-of select="CENA_KOSTRY"/>
                          </PARAMETER>
                      </xsl:if>
                      <xsl:if test="INDEX_NOSNOSTI">
                          <PARAMETER name="Index nosnosti">
                              <xsl:value-of select="INDEX_NOSNOSTI"/>
                          </PARAMETER>
                      </xsl:if>
                      <xsl:if test="INDEX_RYCHLOSTI">
                          <PARAMETER name="Index rychlosti">
                              <xsl:value-of select="INDEX_RYCHLOSTI"/>
                          </PARAMETER>
                      </xsl:if>
                      <xsl:if test="NAZEV_DEZENU">
                          <PARAMETER name="Název dezénu">
                              <xsl:value-of select="NAZEV_DEZENU"/>
                          </PARAMETER>
                      </xsl:if>
                      <xsl:if test="PROFIL">
                          <PARAMETER name="Profil">
                              <xsl:value-of select="PROFIL"/>
                          </PARAMETER>
                      </xsl:if>
                      <xsl:if test="RAFEK">
                          <PARAMETER name="Ráfek">
                              <xsl:value-of select="RAFEK"/>
                          </PARAMETER>
                      </xsl:if>
                      <xsl:if test="SIRKA">
                          <PARAMETER name="Šířka">
                              <xsl:value-of select="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>

Dostupnost

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:z="http://www.zbozi.cz/ns/offer/1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:template match="/">
      <SHOP xmlns="https://www.pneuvranik.cz">
         <xsl:for-each select="z:SHOP/z:SHOPITEM">
            <SHOPITEM>
               <CODE>
                  <xsl:value-of select="z:ib_cislo_zbozi"/>
               </CODE>
               <PRODUCT_CODE>
                  <xsl:value-of select="z:ib_cislo_zbozi"/>
               </PRODUCT_CODE>
               <EAN>
                  <xsl:value-of select="z:EAN"/>
               </EAN>
               <IN_STORE>
                  <xsl:value-of select="translate(z:ib_interval_skladem, translate(z:ib_interval_skladem, '0123456789', ''), '')"/>
               </IN_STORE>
               <PRICE>
                  <xsl:value-of select="z:PRICE"/>
               </PRICE>
            </SHOPITEM>
         </xsl:for-each>
      </SHOP>
   </xsl:template>
</xsl:stylesheet>