HTMLWriter->HTML2Spreadsheet

Moin moin,
ich versuche von einer Seite Informationen abzugreifen.
Eine CSV Datei enthält einzelne Nummern, die mit einem SpreadsheetUrlDownload an die Basis-URL angefügt werden. Die Seite antwortet mit HTML, unter Anderem auch mit JSON. Dieses lese ich mit dem HTMLWriter und möchte es dann mit einem HTML2Spreadsheet Step parsen.

Leider komme ich aber genau hier nicht weiter. Mich interessiert das Feld „extartnr“ in der Antwort. Ich habe die Antwort dem Post hier angefügt.

Danke schon mal für eure Hilfe!
response_html.json (65,9 KB)

Hallo laddi,

was du extrahieren musst ist der Inhalt des script tags mit dem data Attribute data-store=„react-components“.

Am einfachsten kann das mit der ?split Funktion erreicht werden.

${TEMPLATE_OUTPUT_STRING@TextHTMLWriter_24!?split('<script type="application/vnd.popscan.page-data+json" data-store="react-components">')[1]?split('</script>'[0])}

Den Ganzen HTML Code bei dem umschließenden Script-Tag splitten und den 2. Teil nehmen (Index 1), wieder splitten (schließendes script Tag) und hier aber den ersten Teil (Index 0) nehmen. So solltest du nur den JSON Inhalt bekommen den du als JSON einlesen und parsen kannst.

Ich hoffe das hilft dir weiter…

Grüße Rocco

Hi @synesty-Rocco ,
danke für deine Antwort!

Leider komme ich hier nicht weiter. Ich habe deinen Vorschlag entsprechend meines Outputs angepasst, dennoch kommt ein Fehler:

Anpassung 1:
${TEMPLATE_OUTPUT_STRING@SpreadsheetHTMLWriter_8!?split('<script type="application/vnd.popscan.page-data+json" data-store="react-components">')[1]?split('</script>'[0])}

Anpassung 2:
${output@SpreadsheetHTMLWriter_8!?split('<script type="application/vnd.popscan.page-data+json" data-store="react-components">')[1]?split('</script>'[0])}

Der Fehler ist bei beiden gleich:
The type of a value differs from what was expected. (Root Causes: NonStringOrTemplateOutputException: For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to a sequence (wrapper: f.t.SimpleSequence): ==> TEMPLATE_OUTPUT_STRING@SpreadsheetHTMLWriter_8!?split('<script type="application/vnd.popscan.page-data+json" data-store="react-components">')[1]?split('</script>'[0]) [in template "HTML2Spreadsheet" at line 1, column 4] ---- FTL stack trace ("~" means nesting-related): - Failed at: ${TEMPLATE_OUTPUT_STRING@SpreadsheetH... [in template "HTML2Spreadsheet" at line 1, column 2] ----)

bzw.

The type of a value differs from what was expected. (Root Causes: NonStringOrTemplateOutputException: For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to a sequence (wrapper: f.t.SimpleSequence): ==> output@SpreadsheetHTMLWriter_8!?split('<script type="application/vnd.popscan.page-data+json" data-store="react-components">')[1]?split('</script>'[0]) [in template "HTML2Spreadsheet" at line 1, column 3] ---- FTL stack trace ("~" means nesting-related): - Failed at: ${output@SpreadsheetHTMLWriter_8!?spl... [in template "HTML2Spreadsheet" at line 1, column 1] ----)

Selbst wenn ich im HTML2Spreadsheet über das + nur ${output@SpreadsheetHTMLWriter_8!} auswähle, kommen keine Daten an.

Im vorherigen Step sind allerdings Daten in dem Output:

Hallo laddi,

meine Idee war für HTML Code gedacht der so direkt aus einem Step kommt. Das selbe kannst du aber auch in einem Spreadsheet machen. Da musst du dann aber die Spalte anstatt, wie in meinem Beispiel, des Step-Outputs nehmen. Alternativ könntest du im TextHTMLWriter auch über alle Zeilen iterieren und pro Zeile den JSON Text extrahieren. Einfacher ist es aber im Mapper.

${SPALTENNAME8!?split(‚‘[0])}

Wenn die Daten aber aus dem SpreadsheetUrlDownload kommen brauchst du den HTML2Spreadsheet nicht. nimm die Response aus dem API Call und verarbeite die wie in meinem Beispiel beschrieben.

meine (fake) API Response:

→ Output in den TextHTMLWriter

→ das Ergebnis ist der extrahierte JSON Text

Grüße Rocco