[gelöst] Gaspreis von Internetseite Abfragen funktioniert nicht

Begonnen von RatisBow, 20 August 2020, 18:38:34

Vorheriges Thema - Nächstes Thema

RatisBow

Ich versuche von der Seite www.fluessiggas-gemeinsam-kaufen.de den Gaspreis für meine Region abzufragen. Datum geht mit(31|30|[012]\d|\d)\. (\:Januar|Februar|März|April|Mai|Juni|July|August|Septemper|Oktober|November|Dezemeber)+ (\d{1,6}+)

auszulesen, beim Preis bringt er  ExtractReading Netto did not match. Was habe ich falsch gemacht?

Hier meine Defines:define Gaspreis_fgk HTTPMOD https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich 7200
attr Gaspreis_fgk enableControlSet 1
attr Gaspreis_fgk enableCookies 1
attr Gaspreis_fgk enforceGoodReadingNames 1
attr Gaspreis_fgk handleRedirects 1
attr Gaspreis_fgk reading01Name Netto
attr Gaspreis_fgk reading01Regex 93,.*netto\x20views-align-center\"\>\x20([\d,]+)
attr Gaspreis_fgk reading02Name Datum
attr Gaspreis_fgk reading02Regex (31|30|[012]\d|\d)\. (\:Januar|Februar|März|April|Mai|Juni|July|August|Septemper|Oktober|November|Dezemeber)+ (\d{1,6}+)
attr Gaspreis_fgk reading03Name Brutto
attr Gaspreis_fgk reading03Regex 93,.*brutto views-align-center"\> ([\d,]+)
attr Gaspreis_fgk reading04Name Preis
attr Gaspreis_fgk reading04Regex 93,.*netto views-align-center"\> ([0-9,]+).*brutto views-align-center"\> ([0-9,]+)

Brutto und Preis habe ich hinzugenommen, um Unterschiede in den Abfragen auszutesten. Leider erhalte ich ausser dem Datum nichts zurück.
Hier das List:
Internals:   BUSY       0
   DEF        https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich 7200
   FUUID      5f3e271f-f33f-7b43-afaa-d821cbe8e4cf06ec
   Interval   60
   LASTSEND   1597939860.19593
   MainURL    https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
   ModuleVersion 3.5.22 - 7.2.2020
   NAME       Gaspreis_fgk
   NOTIFYDEV  global
   NR         448
   NTFY_ORDER 50-Gaspreis_fgk
   STATE      1.00 Netto am 20. August 2020
   TRIGGERTIME 1597939920.19413
   TRIGGERTIME_FMT 2020-08-20 18:12:00
   TYPE       HTTPMOD
   addr       https://www.fluessiggas-gemeinsam-kaufen.de:443
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
   header     
   host       www.fluessiggas-gemeinsam-kaufen.de
   httpheader HTTP/1.1 200 OK
Date: Thu, 20 Aug 2020 16:12:21 GMT
Server: Apache
ETag: "a22d-5ad4c95f66a45-gzip"
Accept-Ranges: bytes
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
X-Cached-By: Boost
Content-Length: 11214
Connection: close
Content-Type: text/html; charset=utf-8
   httpversion 1.0
   hu_blocking 0
   hu_filecount 373
   hu_port    443
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /fluessiggaspreise-aktuell-jahresvergleich
   protocol   https
   redirects  0
   timeout    2
   url        https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
   value      0
   CompiledRegexes:
   QUEUE:
   READINGS:
     2020-08-20 18:11:00   Datum-1         20
     2020-08-20 18:11:00   Datum-2         August
     2020-08-20 18:11:00   Datum-3         2020
     2020-08-20 13:10:59   Netto           1
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
     value      0
   defptr:
     readingBase:
       Datum-1    reading
       Datum-2    reading
       Datum-3    reading
       Netto      reading
     readingNum:
       Datum-1    02
       Datum-2    02
       Datum-3    02
       Netto      01
     readingOutdated:
     readingSubNum:
       Datum-1    -1
       Datum-2    -2
       Datum-3    -3
     requestReadings:
       update:
         Datum-1    reading 02-1
         Datum-2    reading 02-2
         Datum-3    reading 02-3
         Netto      reading 01
   sslargs:
Attributes:
   enableControlSet 1
   enableCookies 1
   enforceGoodReadingNames 1
   handleRedirects 1
   reading01Name Netto
   reading01Regex 93,.*netto\x20views-align-center\"\>\x20([\d,]+)
   reading02Name Datum
   reading02Regex (31|30|[012]\d|\d)\. (\:Januar|Februar|März|April|Mai|Juni|July|August|Septemper|Oktober|November|Dezemeber)+ (\d{1,6}+)
   reading03Name Brutto
   reading03Regex 93,.*brutto views-align-center"\> ([\d,]+)
   reading04Name Preis
   reading04Regex 93,.*netto views-align-center"\> ([0-9,]+).*brutto views-align-center"\> ([0-9,]+)
   room       I.Gas
   stateFormat { sprintf("%.2f Netto am %2i. %s %i", ReadingsVal($name,"Netto",0), ReadingsVal($name,"Datum-1",0), ReadingsVal($name,"Datum-2",0), ReadingsVal($name,"Datum-3",0))}
   userattr   reading01Format reading01Name reading01RegOpt reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
   verbose    5

Beim Reading kommt das Netto einmal vor, da ich es auf .* gesetzt hatte.

Mit dem Befehl:
93,.*netto views-align-center\"\> ([\d,]+)
kann ich unter https://regex101.com/ den Wert finden.
Hier der entsprechende Teststring gekürzt.
> West I </td> <td class="views-field views-field-field-priceziparea"> 40, 41, 42, 44, 50, 51, 52, 53, 58, 59 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 28,18 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,69 </td> </tr> <tr class="even"> <td class="views-field views-field-field-priceregion"> West II </td> <td class="views-field views-field-field-priceziparea"> 45, 46, 47, 48 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 27,97 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,45 </td> </tr> <tr class="odd"> <td class="views-field views-field-field-priceregion"> Nord-West I </td> <td class="views-field views-field-field-priceziparea"> 49 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 27,80 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,25 </td> </tr> <tr class="even"> <td class="views-field views-field-field-priceregion"> Süd II </td> <td class="views-field views-field-field-priceziparea"> 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 88, 89, 97, 98, 99 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 28,44 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,99 </td> </tr> <tr class="odd views-row-last"> <td class="views-field views-field-field-priceregion"> Süd-Ost </td> <td class="views-field views-field-field-priceziparea"> 80, 81, 82, 83, 84, 85, 86, 87, 90, 91, 92, 93, 94, 95, 96 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 29,79 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 34,55 </td> </tr> </tbody> </table>finden sollte er 29,79. Doch ich erhalte kein Ergebnis
Kann mir da jemand weiter helfen?

betateilchen


defmod gaspreis HTTPMOD https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
attr gaspreis reading01Name netto
attr gaspreis reading01Regex 93,.*\n.*netto.*\n.*(\d\d,\d\d)
attr gaspreis reading02Name brutto
attr gaspreis reading02Regex 93,.*\n.*\n.*\n.*brutto.*\n.*(\d\d,\d\d)
attr gaspreis reading03Name datum
attr gaspreis reading03Regex am.*<b>(.*)<.*im
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

RatisBow

#2
Vielen Dank für die schnelle Antwort. damit Funktioniert es.

Wo ist der Unterschied? Wenn ich diese Abfrage mit https://regex101.com/ Teste, habe ich kein Ergebnis. \n kenne ich als Zeilenumbruch. Ist das wegen der Tabellenform notwendig?

Für alle die es Interresiert, hier meine Defines:

Für die Seite fluessiggas-gemeinsam-kaufen

define Gaspreis_fgk HTTPMOD https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich 7200
attr Gaspreis_fgk room I.Gas
attr Gaspreis_fgk enableControlSet 1
attr Gaspreis_fgk enableCookies 1
attr Gaspreis_fgk enforceGoodReadingNames 1
attr Gaspreis_fgk handleRedirects 1
attr Gaspreis_fgk stateFormat { sprintf("Netto %s Brutto %s am %s", ReadingsVal($name,"Netto",0), ReadingsVal($name,"Brutto",0), ReadingsVal($name,"Datum",0))}
attr Gaspreis_fgk reading01Name Netto
attr Gaspreis_fgk reading01OExpr $val =~ s/,/\./; $val;
attr Gaspreis_fgk reading01Regex 93,.*\n.*netto.*\n.*(\d\d,\d\d)
attr Gaspreis_fgk reading02Name Datum
attr Gaspreis_fgk reading02Regex am.*<b>(.*)<.*im
attr Gaspreis_fgk reading03Name Brutto
attr Gaspreis_fgk reading03OExpr $val =~ s/,/\./; $val;
attr Gaspreis_fgk reading03Regex 93,.*\n.*\n.*\n.*brutto.*\n.*(\d\d,\d\d)


Tip: "attr Gaspreis_fgk reading01OExpr $val =~ s/,/\./; $val;" lässt sich nicht direkt über die Befehlszeile eingeben, deshalb erst "attr Gaspreis_fgk reading03OExpr $val =~ s/,/\./" eingeben. Den Rest oder den kompletten Ausdruck kann man dan über die grafische Oberfläche von FHEM eintragen. Dort wird er akzeptiert.

Die Log-Datei:

define FileLog_Gaspreis_fgk FileLog ./log/Gaspreis_fgk-%Y.log Gaspreis_fgk
attr FileLog_Gaspreis_fgk room I.Gas
attr FileLog_Gaspreis_fgk logtype text


Für die Seite des energieverbraucher gibt es etwas andere Abfragen.

define Gaspreis_bev HTTPMOD https://www.energieverbraucher.de/de/preisabfrage__1101 7200
attr Gaspreis_bev room I.Gas
attr Gaspreis_bev enableControlSet 1
attr Gaspreis_bev enableCookies 1
attr Gaspreis_bev enforceGoodReadingNames 1
attr Gaspreis_bev handleRedirects 1
attr Gaspreis_bev stateFormat { sprintf("Netto %s Brutto %s bis %s", ReadingsVal($name,"Netto-2",0), ReadingsVal($name,"Brutto-2",0), ReadingsVal($name,"Datum",0))}
attr Gaspreis_bev reading01Name Brutto-1
attr Gaspreis_bev reading01OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading01Regex 93, .*\n.*(\d\d)
attr Gaspreis_bev reading02Name Netto-1
attr Gaspreis_bev reading02OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading02Regex 93, .*\n.*\n.*(\d\d,\d)
attr Gaspreis_bev reading03Name Brutto-2
attr Gaspreis_bev reading03OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading03Regex 93, .*\n.*\n.*\n.*(\d\d)
attr Gaspreis_bev reading04Name Netto-2
attr Gaspreis_bev reading04OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading04Regex 93, .*\n.*\n.*\n.*\n.*(\d\d,\d)
attr Gaspreis_bev reading05Name Datum
attr Gaspreis_bev reading05Regex zum ([1-3]?\d.[0-1]?\d.\d\d\d?\d?)


Die Log-Datei:

define FileLog_Gaspreis_bev FileLog ./log/Gaspreis_bev-%Y.log Gaspreis_bev
attr FileLog_Gaspreis_bev room I.Gas
attr FileLog_Gaspreis_bev logtype text


Ich habe beide Log-Dateien in einem SVG-Plot vereint. Dadurch sieht man dann recht schön die Preisunterschiede und Veränderung.
In meinen befehlen frage ich die PLZ 93 ab. Für andere PLZ bitte diesen Wert ändern.

Ich hoffe, das es dem einen oder anderen Hilfreich sein kann.

RatisBow