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 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); } /** 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 +