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á jakoPRICE_VAT ÷ (1 + VAT/100). - Kategorie: Pole
CATEGORYTEXTje odděleno|(např.PNEUMATIKY | Letní pneumatiky | Osobní). Z něj se generují breadcrumb elementyCATEGORYs prefixemPneu Vraník/. - Sklad: Pole
ib_interval_skladem— textová hodnota z původního systému (např.5); přenáší se doIN_STOREbeze 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>