From e22e3fabc942ff495e2916095aaee31d4d063569 Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Mon, 19 Sep 2022 09:31:24 +0200 Subject: [PATCH 1/3] Created test case to check progress Signed-off-by: Christian Wolf --- .../HTMLParser/HttpMicrodataParserTest.php | 4 + .../HTMLParser/res_Microdata/caseFix1209.html | 1338 +++++++++++++++++ .../HTMLParser/res_Microdata/caseFix1209.json | 28 + .../HTMLParser/res_Microdata/caseFix1209.url | 2 + 4 files changed, 1372 insertions(+) create mode 100644 tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html create mode 100644 tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json create mode 100644 tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url diff --git a/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php b/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php index cfab9d273..f96dfc295 100644 --- a/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php +++ b/tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php @@ -38,6 +38,8 @@ public function dataProvider(): array { 'caseC' => ['caseC.html',false,null], 'caseD' => ['caseD.html',true,'caseD.json'], 'caseE' => ['caseE.html',true,'caseE.json'], + + 'caseIssue1209' => ['caseFix1209.html',true,'caseFix1209.json'], ]; } @@ -64,6 +66,8 @@ public function testHTMLFile($filename, $valid, $jsonFile): void { $jsonDest = file_get_contents(__DIR__ . "/res_Microdata/$jsonFile"); $expected = json_decode($jsonDest, true); + // print_r(json_encode($res)); + $this->assertTrue($valid); $this->assertEquals($expected, $res); } catch (HtmlParsingException $ex) { diff --git a/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html new file mode 100644 index 000000000..5df48aec9 --- /dev/null +++ b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.html @@ -0,0 +1,1338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Kürbis-Erdäpfel-Gulasch mit Debreziner | Frisch Gekocht + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+
+ +
+ + + +
+
+
+ + + + + +
+ +
+ Ihr Warenkorb ist zurzeit leider noch leer. +
+ +
    +
  • + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + +
    +
    +
  • +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BeschreibungBetrag
Warenwert Gesamt (inkl. MwSt.){{basket.data.totalSumOfGoods | currency}}
Differenz zum Mindestbestellwert{{basket.data.toMinimumOrderValue | currency}}
Liefergebühren{{basket.data.costOfDelivery | currency}}
Servicegebühren{{basket.data.serviceFee | currency}}
+ Liefergebühren + Servicegebühren + {{0.0 | currency}}
+
+
+ +
+ Gesamtpreis(inkl. MwSt.) +

{{basket.data.totalSum | currency}}

+
+ +
+ Ihre Aktions-Ersparnis +

+ {{basket.data.costSavings | currency}} +

+
+ +
+ +
+ Ihre mögliche Ersparnis als
+ jö Club Mitglied + bis zu + {{basket.priceDifferenceLoyaltyToNormal | currency}} +
+
+ +
+ +
Es konnten leider keine Preise gefunden werden.
+
+
+ + + +
+ +
+
+ +
+ +
+
+
+ +
+
+ + +
+
Inhalt der Seite
+ +
+
+ + + + + + + +
+
+ Kürbis-Erdäpfel-Gulasch mit Debreziner Foto: © Thorsten Suedfels +
+
+
+
+
+
+
+ + 50 min +
+ +
+ + Schwierigkeit 1 von 3 + + + + + +
+ + +
+ +

Kürbis-Erdäpfel-Gulasch mit Debreziner

+
+ FRISCH GEKOCHT Magazin 01. Oktober 2018 +
+ +
+ +
+
+ +
+ + + +
+ + + + + + + + +
+ +
+ +
+
+
+
+ Foto: © Thorsten Suedfels +
+
+ + + +
+
+
+
+
+
+
+

+ Zutaten für + + + + + + + Portionen +

+ +
+
+
    +
  • + + 500 + g + + festkochende Ja! Natürlich Bio-Erdäpfel +
  • +
  • + + 600 + g + + Ja! Natürlich Bio-Hokkaidokürbis +
  • +
  • + + 1 + + + gelbe Ja! Natürlich Bio-Zwiebel +
  • +
  • + + 2 + + + Ja! Natürlich Bio-Knoblauchzehen +
  • +
  • + + 2 + EL + + Ja! Natürlich Bio-Olivenöl +
  • +
  • + + 1 + EL + + Tomatenmark +
  • +
  • + + 800 + ml + + Gemüsesuppe +
  • +
  • + + 3 + EL + + Ja! Natürlich Bio-Estragonsenf +
  • +
  • + + 1 + + + Loorbeerblatt +
  • +
  • + + 200 + g + + Ja! Natürlich Bio Debreziner +
  • +
  • + + 2 + + + rote Ja! Natürlich Bio-Spitzpaprika +
  • +
  • + + 2 + EL + + Ja! Natürlich Bio-Petersilienblätter +
  • +
  • + + + + + Salz +
  • +
  • + + + + + schwarzer Pfeffer aus der Mühle +
  • +
+ + + + Zutaten bestellen im + BILLA Online Shop + + + +
+
+ +
+
+
+
+

+
+ + + + + Zubereitung + + + + +
+

+ + +Erdäpfel schälen, in ca. 2 cm große Würfel schneiden und in kaltes Wasser legen. Kürbis putzen, entkernen und in ebenso große Würfel schneiden. Zwiebel schälen und fein würfeln. Knoblauch schälen und pressen. +

Erdäpfel in einem Sieb gut abtropfen lassen. Öl in einem breiten Topf erhitzen, Zwiebel und Knoblauch hineingeben und ca. 1 Minute anbraten. Erdäpfel und Kürbis dazugeben und unter gelegentlichem Rühren ca. 3 Minuten braten. Tomatenmark unterrühren und kurz anrösten. Suppe, Senf und Lorbeer dazugeben und zugedeckt ca 15 Minuten köcheln lassen. +

Währenddessen die Debreziner in dicke Scheiben schneiden. Die Stielansätze der Paprika zusammen mit den Kernen aus den Schoten schneiden und die Schoten in dünne Ringe schneiden. Petersilie grob hacken. +

Etwa ein Drittel des Gulaschs fein pürieren. Paprika und Debreziner unter das Gulasch mischen und offen ca. 5 Minuten köcheln lassen. Mit Salz und Pfeffer abschmecken. +

Gulasch anrichten, mit Petersilie bestreuen und servieren.

+
+
+
+ +
+ + + +
+ + + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + diff --git a/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json new file mode 100644 index 000000000..bfa2c2c78 --- /dev/null +++ b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.json @@ -0,0 +1,28 @@ +{ + "@type": "Recipe", + "@context": "http://schema.org", + "name": "Kürbis-Erdäpfel-Gulasch mit Debreziner", + "recipeYield": "4 Portionen", + "image": [ + "https://files.billa.at/fg/thema7/20181001_07_g.jpg" + ], + "recipeIngredient": [ + "500\n g\n \n festkochende Ja! Natürlich Bio-Erdäpfel", + "600\n g\n \n Ja! Natürlich Bio-Hokkaidokürbis", + "1\n \n \n gelbe Ja! Natürlich Bio-Zwiebel", + "2\n \n \n Ja! Natürlich Bio-Knoblauchzehen", + "2\n EL\n \n Ja! Natürlich Bio-Olivenöl", + "1\n EL\n \n Tomatenmark", + "800\n ml\n \n Gemüsesuppe", + "3\n EL\n \n Ja! Natürlich Bio-Estragonsenf", + "1\n \n \n Loorbeerblatt", + "200\n g\n \n Ja! Natürlich Bio Debreziner", + "2\n \n \n rote Ja! Natürlich Bio-Spitzpaprika", + "2\n EL\n \n Ja! Natürlich Bio-Petersilienblätter", + "Salz", + "schwarzer Pfeffer aus der Mühle" + ], + "recipeInstructions": [ + "Zubereitung\n \n \n \n \n \n \n\n\nErdäpfel schälen, in ca. 2 cm große Würfel schneiden und in kaltes Wasser legen. Kürbis putzen, entkernen und in ebenso große Würfel schneiden. Zwiebel schälen und fein würfeln. Knoblauch schälen und pressen.\nErdäpfel in einem Sieb gut abtropfen lassen. Öl in einem breiten Topf erhitzen, Zwiebel und Knoblauch hineingeben und ca. 1 Minute anbraten. Erdäpfel und Kürbis dazugeben und unter gelegentlichem Rühren ca. 3 Minuten braten. Tomatenmark unterrühren und kurz anrösten. Suppe, Senf und Lorbeer dazugeben und zugedeckt ca 15 Minuten köcheln lassen.\nWährenddessen die Debreziner in dicke Scheiben schneiden. Die Stielansätze der Paprika zusammen mit den Kernen aus den Schoten schneiden und die Schoten in dünne Ringe schneiden. Petersilie grob hacken.\nEtwa ein Drittel des Gulaschs fein pürieren. Paprika und Debreziner unter das Gulasch mischen und offen ca. 5 Minuten köcheln lassen. Mit Salz und Pfeffer abschmecken.\nGulasch anrichten, mit Petersilie bestreuen und servieren." + ] + } diff --git a/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url new file mode 100644 index 000000000..20b574d66 --- /dev/null +++ b/tests/Unit/Helper/HTMLParser/res_Microdata/caseFix1209.url @@ -0,0 +1,2 @@ +https://frischgekocht.billa.at/rezept/kuerbis-erdaepfel-gulasch-mit-debreziner-BI-28065 + From 14a21ec14d6060a43c1e049319497804816544cd Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Thu, 22 Sep 2022 16:23:04 +0200 Subject: [PATCH 2/3] Only use descendants in XPath queries Signed-off-by: Christian Wolf --- lib/Helper/HTMLParser/HttpMicrodataParser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Helper/HTMLParser/HttpMicrodataParser.php b/lib/Helper/HTMLParser/HttpMicrodataParser.php index 212df4764..3405aed8f 100644 --- a/lib/Helper/HTMLParser/HttpMicrodataParser.php +++ b/lib/Helper/HTMLParser/HttpMicrodataParser.php @@ -207,7 +207,7 @@ private function searchSimpleProperties(DOMNode $recipeNode, string $property): * @return DOMNodeList A list of all found child nodes with the given property */ private function searchChildEntries(DOMNode $recipeNode, string $prop): DOMNodeList { - return $this->xpath->query("//*[@itemprop='$prop']", $recipeNode); + return $this->xpath->query(".//*[@itemprop='$prop']", $recipeNode); } /** From 15dfa4a0b71cef3777bc5d261ac0319245be8d30 Mon Sep 17 00:00:00 2001 From: Christian Wolf Date: Thu, 22 Sep 2022 16:36:21 +0200 Subject: [PATCH 3/3] Update changelog Signed-off-by: Christian Wolf --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36ddeb857..60a41c8f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ [#1201](https://github.com/nextcloud/cookbook/pull/1201) @christianlupus - Fix API endpoint helpers to enforce JSON answers and minor styling enhancements [#1202](https://github.com/nextcloud/cookbook/pull/1202) @christianlupus +- Fix XPath to allow for microdata parsing with multiple adjacent schema objects in HTML code + [#1220](https://github.com/nextcloud/cookbook/pull/1220) @christianlupus ### Maintenance - Use the pre-built database images for MySQL and PostgreSQL tests