EdeeShop · Implementace

XML Feeds

Upraveno

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.

Generová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
<entry>    <g:id>123</g:id>    <g:title>Červená šála</g:title>    <g:image_link>http://localhost/img/eshop/placeholder/eshop-product-detail.jpg</g:image_link>    <g:condition>new</g:condition>    <g:availability>out of stock</g:availability>    <g:sale_price>399 CZK</g:sale_price></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.

Generová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

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

Tvorba 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

Př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

Vý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:

Tvorba vlastní metody

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

java
import com.fg.form.web.render.freemarker.func.AbstractTemplateMethodModel;import com.fg.cps.eshop.edee.export.feed.methods.FeedMethod;
public class CustomProjectMethod extends AbstractTemplateMethodModel implements FeedMethod {    @Override    public Object exec(List arguments) throws TemplateModelException {      //Implementation      final Object objectExample = getArgument(arguments, 0, Object.class);      return objectExample.toString();    }}

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

Feed 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

Externí kategorie

Google

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.

Heureka

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

Zboží.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>.

Facebook

Pro export produktů na Facebook se používá strom kategorií googlu. V konfiguraci <externalCategorySource>google</externalCategorySource>.

Skrz.cz

Pro export produktů na Skrz.cz se používá strom kategorií heureky. V konfiguraci <externalCategorySource>heureka</externalCategorySource>.