XML Feeds
XML Feeds
Feature XML feedů v EdeeShop slouží k poskytování informací o entitách ve formátu XML. Tyto feedy mají několik účelů a využití. V aktuální implementaci podporujeme feedy pro:
- Produkty
- Skladovost
- Hodnocenní produktů
Ke zpracování feedů dochází asynchroně pomocí job modulu. Každý typ feedu pro každý konfigurovaný katalog, kromě katalogu produktových předloh, obsahuje dva joby jeden job pro generování snippetů a druhý job pro finalní generaci feedu.
Konfigurace feedů je popsána zde.
Zkopírovat odkaz na sekciGenerování Snippetů
K generování snippetů dochází inkrementálně ve výchozí implementaci jednou denně pro produkty a jednou za deset minut pro skladovost.
Pro všechny produkty, které v Evitě mají větší čas publikace než poslední běh jobu generování feedů, dochází k vygenerování nové verze snippetu. Snippet je uložen v additional datech produktu, kde každé dato představuje jeden feed.
Zkrácený příklad snippetu pro Google může vypadat takto:
1 <entry>2 <g:id>123</g:id>3 <g:title>Červená šála</g:title>4 <g:image_link>http://localhost/img/eshop/placeholder/eshop-product-detail.jpg</g:image_link>5 <g:condition>new</g:condition>6 <g:availability>out of stock</g:availability>7 <g:sale_price>399 CZK</g:sale_price>8</entry>
Připravený snippet je následně použit k vygenerování kompletního feedu produktů, kde výhodou snippetu je, že nezměněné produkty nejsou stále dokola generovány, což významně šetří čas.
Implementace jobu je k naleznutí zde.
Zkopírovat odkaz na sekciGenerování Feedů
Asynchronní úloha pro každý konfigurovaný feed zpracuje všechny publikované produkty v Evitě, které obsahují data pro konkrétní feed, a dochází k vytvoření nové verze feedu. Vytvořený feed je následně uložen do úložiště aplikace a je možné ho z úložiště kdykoliv načíst.
Implementace jobu je k naleznutí zde
Zkopírovat odkaz na sekciŠablony
V základní implementaci modulu existují výchozí implementace pro:
- heureka
- zbozi
- glami
Každý feeed obsahuje dvě šablony:
- šablonu pro snippet konkrétního feedu
- šablonu pro feed
Šablony jsou k naleznutí zde
Tyto šablony je možné na projektu přetížit, či vytvořit další pro feedy, které nejsou podporované v základu.
Zkopírovat odkaz na sekciTvorba vlastní šablony
Šablony jsou vytvořeny pomocí šablonovacího jazyka freemarker stejně jako například šablony mailu.
Dostupné proměnné v šabloně jsou:
- item => ProductSnippetContext
- product => PublishedProductContract
- catalog => Catalog
- catalogRegion => CatalogRegion
- productFeedConfig => EdeeShopProductFeedConfig
- feedConfig => FeedConfiguration
- cartContext => CartContext
Pokud by byly potřeba nějaká další proměnné na projektu je možné přetižít metodu: ProductFeedSnippetBuilder.createInputs
Zkopírovat odkaz na sekciPřeskočení položky
Položky lze přeskočit dvěma způsoby. Prvním způsobem je, pokud šablona feedů nevrátí žádná data. Celou šablonu je možné obalit klauzulí if.
Druhým způsobem je přeskočení vyhodnocení položky pomocí metody: AbstractFeedSnippetBuilder.shouldSkipItem, kde ve výchozí implementaci je vyhodnocen SpEL. Výraz lze načíst pomocí konfigurace: FeedConfiguration.getShouldSkipItem
Zkopírovat odkaz na sekciVýpočetní metody
Některá logika jako výpočet externích kategorií pro konkrétní feed, konverze hodnot, formátování výstupu a jiné by se opakovali napříč šablonami nebo by logika byla komplikovaná vytvořit ve FreeMarkeru. Z tohoto důvodu vznikla sada připravených metod pro podporu generování snippetů, které jsou možné projektově upravit či vytvořit další. Vytvořené metody ze základu implementují interface FeedMethod. Existujicí metody jsou:
- feed.getConvertedValue(originalValue, converterKey, feedConfiguration)
- Metoda konvertuje původní hodnotu do požadované pomocí konvertéru definovaného klíčem converterKey, který je registrován ve feedProfilu aktualního feedu
- feed.getCashOnDeliveryPrice(context, shippingMethod)
- Metoda vypočítá cenu dobírky pro konkrétní dopravu
- feed.getProductNameWithVariantParameters(product)
- Metoda vytvoří název produktu s variantními parametry.
- feed.formatPrice(price, scale?, roundingMode?)
- Metoda formátuje cenu do požadovaného formátu, default: scale 2, roundinhType: HALF_UP
- feed.getImgUrl(context, feedConfiguration)
- Metoda načítá hlavní obrázek produktu v konkrétní galerii pro konkrétní variantu obrázku. (Galerie a varianta je načitána z feedConfiguration)
- feed.getImgAlternativeUrl(context, feedConfiguration)
- Metoda vytvoří seznam url alternativních obrázku pro produkt dle konfigurace feedu
- feed.getProductCategoryNames(context, feedConfiguration, allowEshopCategoryNames?, separator?)
- Metoda vytvoří řetězec externích kategorií pro produkt spojený separátorem.
- Pokud nenajdeme externí kategorie a allowEshopCategoryNames parametr je true, jsou vráceny původní EdeeShop kategorie
- feed.getProductEshopCategoryNames(context, feedConfiguration, firstOnly?, seprator?)
- Metoda vytvoří řetězec EdeeShop kategorií spojený separátorem.
- Pokud parametr firstOnly je true, vracíme pouze první kategorii
- feed.getProductUrl(context)
- Metoda vytvoří absolutní URL detailu produktu, pokud relativní url je k produktu přiřazena
- feed.getWithoutHTML(product.description)
- Metoda pro vstupní řetězec data, parsuje HTML tagy z řetězce a escapuje Xml111 znaky.
- feed.getFeedSnippet(feedConfiguration, product)
- Metoda načte připravený snippet z additional dat produktu pro zpracování v šabloně
- feed.getProductRatings(context)
- Metoda načte všechny detaily hodnocenní pro produkty
- feed.getRatingDetailPros(rating)
- Metoda rozparsuje všechny pozitivní komentáře pomocí \r\n
- feed.getRatingDetailCons(rating)
- Metoda rozparsuje všechny negativní komentáře pomocí \r\n
- feed.getUserByExternalId(externalId)
- Metoda načte objekt uživatele pomocí externalId (ve většině případů externalId = login)
Zkopírovat odkaz na sekciTvorba vlastní metody
Pro vytvoření vlastní metody, stačí vytvořit třídu, která
1 import com.fg.form.web.render.freemarker.func.AbstractTemplateMethodModel;2import com.fg.cps.eshop.edee.export.feed.methods.FeedMethod;3 4public class CustomProjectMethod extends AbstractTemplateMethodModel implements FeedMethod {5 @Override6 public Object exec(List arguments) throws TemplateModelException {7 //Implementation8 final Object objectExample = getArgument(arguments, 0, Object.class);9 return objectExample.toString();10 }11}
Pokud by metoda obsahovala cache, kterou je potřeba po zpracování snippetů ručně smazat. Je možné implementovat rozhraní com.fg.cps.eshop.edee.export.feed.methods.FeedMethodWithCache
Zkopírovat odkaz na sekciFeed profily
FeedProfil slouží k možností načtení společných částí konfigurace mezi instancemi feedů. Příkladem může být, například to že jeden zákazník má víc implementací heureka feedů. Typově:
- standardní heuréka
- heuréka s upraveným datem dodání
- heuréka s parametry
- heuréka s parametry s custom jmény
Zkopírovat odkaz na sekciExterní kategorie
Zkopírovat odkaz na sekciGoogle
Google používá vlastní strom kategorií, který je periodicky automaticky aktualizován. Každé kategorii lze nastavit v administraci právě jedna google kategorie. Strom kategorií je automaticky aktualizován na základě property googleCategoriesImportInterval.
V konfiguraci
Zkopírovat odkaz na sekciHeureka
Heuréka používá vlastní strom kategorií, který je periodicky automaticky aktualizován. Každé kategorii lze nastavit v administraci právě jednu heureka kategorii. Strom kategorií je automaticky aktualizován na základě parametru importInterval konfigurační hodnoty externalCategory daného zdroje. Specifikace formátu je k dispozici zde. V konfiguraci <externalCategorySource>heureka</externalCategorySource>.
Zkopírovat odkaz na sekciZboží.cz
Zboží.cz používá vlastní strom kategorií, který je periodicky automaticky aktualizován. Každé kategorii lze nastavit v administraci právě jednu kategorii zboží.cz. Strom kategorií je automaticky aktualizován na základě property zboziCategoriesImportInterval. V konfiguraci exportFormat="zbozi". Specifikace formátu je k dispozici zde. V konfiguraci <externalCategorySource>zbozi</externalCategorySource>.
Zkopírovat odkaz na sekciFacebook
Pro export produktů na Facebook se používá strom kategorií googlu. V konfiguraci <externalCategorySource>google</externalCategorySource>.
Zkopírovat odkaz na sekciSkrz.cz
Pro export produktů na Skrz.cz se používá strom kategorií heureky. V konfiguraci <externalCategorySource>heureka</externalCategorySource>.