Landingpages aus Produktdaten erstellen mit JSON-Dateien

Die Anforderung

Ein Kunde möchte automatisch Landingpages aus seinen Artikeldaten erstellen, die auf seiner Website bzw. Onlineshop angezeigt werden.
Die Artikeldaten sind dabei in einem Synesty-Datastore gespeichert. Aus diesen Artikeldaten sollen bestimmte Merkmalen herausgefiltert und daraus Dateien im JSON Format erstellt werden. Die Dateien sollen für die Website exportiert und von einem speziell für diesen Zweck entwickelten Plugin eingelesen und auf einer Landingpage dargestellt werden – mit Produktname, Kategorie, Shop-URL, Preis sowie einem Produktbild von etwa 10 Artikeln.

Mit anderen Worten: Er möchte Landingpages aus einem speziellen Datenfeed erstellen.

Außerdem möchte der Kunde selbst relativ einfach neue Filter einbauen, um je nach Bedarf einen neuen Satz an Produkten auf seiner Landingpage darzustellen.

Die Umsetzung

Dafür soll ein Flow erstellt werden, der aus den Produktdaten des Kunden JSON-Dateien erstellt, daraus JSON-Dateien erzeugt und diese auf einen SFTP Server des Kunden geladen lädt. Der Flow soll automatisiert ausgeführt werden, so dass z.B. einmal pro Tag alle Änderungen synchronisiert werden.

 

Landingpages Flow
Flow für Landingpages

 

Sichtung der Daten

Da bereits alle nötigen Daten in seinem Datastore vorliegen, kann mit dem SearchDatastore Step relativ einfach die neusten Produkte ausgeben. In einem SpreadsheetMapper werden die notwendigen Spalten mit den Namen (name, url, image, price) der Felder der Zieldateien sowie der Hilfsspalten mit zusätzlichen Daten (Kategorie, Shopaktion, Hersteller) angelegt und mit den Spalten des Outputs des SearchDatastore gemappt. Die URLs der Bildes und die Preise können direkt ohne weitere Manipulation übernommen werden. Da der Name der Artikel Sonderzeichen enthalten könnte, wird in Freemarker-Notation ${name!?json_string} die ganze Zeichenkette bereits an dieser Stelle in ein JSON-konformes Format gebracht. Die Produkt-URL, welche sich nach dem Schema www.shopurl.de/produktID zusammensetzt, wurde ebenfalls mit Hilfe der Freemarker Logik zusammengesetzt. Im Resultat haben wir nun ein Spreadsheet, das alle Daten die in die Zieldateien sollen beinhaltet.

Daten sieben

Im nächsten Schritt werden dann die Filter gesetzt, um Artikel bestimmter Kategorien, Hersteller oder nach Sonderangeboten zu filtern. Einer dieser Filter sieht so aus: category_id! == ’18’ && shopspecial! == ‘1’. Hier werden zum Beispiel Artikel einer Kategorie mit der ID 18 und Artikel, die mit shopspecial 1 markiert sind, ausgesiebt. Jeder Filter bezieht dabei seine Daten aus dem vorher gemappten Spreadsheet und gibt ein neues Spreadsheet aus, welches ausschließlich die gewünschten Daten enthält. Da nun viele Spreadsheets vorhanden sind, könnte jetzt individuell aus jeder Tabelle ein JSON erstellt und auf den FTP geladen werden. Dieser Weg ist aber wenig intuitiv für den Kunden, da nicht nur neue Filter hinzugefügt, sondern für jeden Filter auch die Steps zur JSON Erstellung und FTP Upload immer wieder kopiert und neu verknüpft werden müssen.

Besser ist es, mit dem SpreadsheetAppend die Outputs aller Filter wieder zu einem Spreadsheet zusammenzuführen. Das reduziert den Pflegeaufwand für den Kunden, wenn mal ein neuer Filter dazukommt. Das heißt dass Anpassungen im Flow nur an 2 Stellen notwendig sind um eine neue JSON Datei zu generieren.

Der Output des SpreadsheetAppend ist ein großes Spreadsheet aus allen vorherigen Filter-Spreadsheets. Dieses große Spreadsheet wird nun mit einem SpreadsheetSplitter Spreadsheet-Liste auftrennt – mit einem Spreadsheet pro Kategorie.  Da der Kunde bisher immer Kategorien filtert, kann an dieser Stelle die Kategorie ID als Split-Kriterium genutzt werden.

JSON Dateien für Landingpages zusammenbauen

Im nächsten Step, dem TextHTMLWriterMultiOutput, werden aus der Spreadsheet-Liste mehrere JSON-Dateien erstellt.
Die Freemarker-Logik wird im folgenden dargestellt.

Freemarker Template zur Erstellung von JSON-Dateien aus Produktdaten

Die Logik ist grob wie folgt:

  • Es wird über die Spreadsheet-Liste des SpreadsheetSplitter iteriert.
  • Pro Spreadsheet soll eine JSON-Datei erzeugt werden
  • Der Dateiname soll Kategorie und ShopAktion enthalten
  • Der mit geschweiften Klammern umschlossene Teil stellt den eigentlichen JSON Teil dar.
  • Hier wird über jede Zeile des Spreadsheets gelaufen und der befüllte JSON Block in die Variable fileContent gegeben.
  • Die Freemarker Notation <#sep> trennt jeden Block JSON konform mit einem Komma, überspringt die Ausgabe aber bei der letzten Zeile bzw. nach dem letzten Block.
  • Zuletzt wird der Inhalt von fileContent in eine Datei geschrieben, die sich aus dem Prefix „Landingpage-“ und den vorher festgelegten Variablen der Kategorie und ShopAktion zusammensetzt.

Der Output des TextHTMLWriterMultiOutput ist eine Dateiliste, die jetzt alle erstellten JSON Dateien enthält. Diese kann nun an den FTPUpload Step übergeben und die Dateien auf den FTP geladen werden.

Fazit

Zusammenfassend kann man sagen, dass es für den Kunden relativ einfach ist neue JSON Dateien zu erstellen, da effektiv nur 2 Stellen bearbeitet werden müssen. Ein neuer Filter muss eingefügt, und der SpreadsheetAppend angepasst werden. Da bei der eigentlichen Dateiausgabe viel mit Freemarker geskriptet wurde ist der Flow auf den ersten Blick etwas komplexer geworden – im Resultat lohnt aber der Aufwand, da der Kunde dieses Freemarker-Skript nicht mehr anfassen muss und und der Prozess fast voll automatisch abläuft.

Autor: Rocco Riens