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:

xml
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:

  • google
  • facebook
  • 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:

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:

Zkopírovat odkaz na sekciTvorba vlastní metody

Pro vytvoření vlastní metody, stačí vytvořit třídu, která

java
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 google. Specifikace formátu je k dispozici zde.

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>.