Gaspreisabfrage mit HTTPMOD - Regex Problem

Begonnen von Marlen, 05 August 2017, 15:10:02

Vorheriges Thema - Nächstes Thema

amenomade

Also... in deiner hier gezeigten Log hattest Du noch die alte Regex
Zitat2017.08.10 13:11:21 5: Gaspreis: ExtractReading Test with regex /name="sued2".*?<td>.*?<td>([\d,]*)/...
Und du hattest schon gemerkt, dass 2x sued2 in der Seite sind, dewegen hat die Regex nicht funktioniert.

Die neue Regex wurde so geändert, dass die nur den 2. sued2 identifiziert. Die ist fast gleich, aber nicht ganz:
(?s)sued2">.*?<td>.*?<td>([\d,]*)

upgradeAttributes sollte kein Einfluss bei dir haben, da Du schon reading01Name und reading01Regex, sprich die neue Syntax hattest.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Marlen

Hmmmm.....
ich hab hier soviel versucht...aber ich bin mir sicher ich hab es mit
(?s)sued2">.*?<td>.*?<td>([\d,]*)
auch versucht!

Gibt es irgendwo eine Anleitung, wie man das Regex aufbaut?

LG
  Marlen

Marlen

Zum Beispiel hier:
            </style><h1><span class="left">Angebote der Woche *</span><span class="right">gültig vom 07.08. bis 12.08.2017</span></h1><div id="list-idp3786208" class="offerlist"><div class="Wasser"><div class="item" SKU="72115"><div class="img"><img src="/wAssets-logo-getraenke/img/angebote/artikelbilder/72115_neu.jpg"/></div><div class="description"><span class="value">Förstina Sprudel Premium</span><br/><span class="value">diverse Sorten im Glas</span><br/><span class="value">Neu im Sortiment: plus Lemon</span><div class="addOnText1"><span class="value"/></div></div><div class="pricebox"><div class="oldPrice"><span class="label">statt </span><span class="value">4,79</span><span class="label"> EUR</span></div><div class="newPrice"><span class="value">3,99</span><span class="label"> Euro</span></div><div class="addOnText2"><span class="value">12/0,70 Kasten + €3,30 Pfd.</span></div><div class="addOnText3"><span class="value">1 Ltr. = €0,48</span></div></div><div class="clear"></div></div><div class="item" SKU="63309"><div class="img"><img src="/wAssets-logo-getraenke/img/angebote/artikelbilder/63310.jpg"/></div><div class="description"><span class="value">Bad Brückenauer Mineralwasser</span><br/><span class="value">diverse Sorten</span><div class="addOnText1"><span class="value"/></div></div><div class="pricebox"><div class="oldPrice"><span class="label">statt </span><span class="value">6,79</span><span class="label"> EUR</span></div><div class="newPrice"><span class="value">4,99</span><span class="label"> Euro</span></div><div class="addOnText2"><span class="value">12/1,00 Kasten + €3,30 Pfd.</span></div><div class="addOnText3"><span class="value">1 Ltr. = €0,42</span></div></div><div class="clear"></div></div><div class="item" SKU="81646"><div class="img"><img src="/wAssets-logo-getraenke/img/angebote/artikelbilder/81646_dk.jpg"/></div><div class="description"><span class="value">Rosbacher Mineralwasser</span><br/><span class="value">diverse Sorten</span><br/><span class="value">Doppelkasten</span><div class="addOnText1"><span class="value"/></div></div><div class="pricebox"><div class="oldPrice"><span class="label">statt </span><span class="value">13,98</span><span class="label"> EUR</span></div><div class="newPrice"><span class="value">10,98</span><span class="label"> Euro</span></div><div class="addOnText2"><span class="value">2x12/1,00 Kasten + €6,60 Pfd.</span></div><div class="addOnText3"><span class="value">1 Ltr. = €0,46</span></div></div><div class="clear"></div></div></div></div></div><!--CONTENT:STOP--><div id="areaContent6Global"><!--CONTENT:START--><!--CONTENT:STOP--></div></div>


hier steht alles in einer Zeile!

Hier interessiert mich der Teil:
>Bad Brückenauer Mineralwasser</span><br/><span class="value">diverse Sorten</span><div class="addOnText1"><span class="value"/></div></div><div class="pricebox"><div class="oldPrice"><span class="label">statt </span><span class="value">6,79</span><span class="label"> EUR</span></div><div class="newPrice"><span class="value">4,99</span>

Mein Regex:
>Bad Brückenauer Mineralwasser</span>.*`<div class="newPrice"><span class="value">[^0-9]+([0-9\.]+)


---liefert hier nur "10"!

::)


dev0


amenomade

#19
ZitatGibt es irgendwo eine Anleitung, wie man das Regex aufbaut?
Nein. Aber mit regex101 kann man gut lernen: jedes Step des Verfahrens ist genau erklärt. Wenn man das versteht, kann man schon seine eigene Regex bauen.

Ich baue immer meine plus oder minus so:

  • ein eindeutiges Stichword identifizieren, als Start des Matchings
  • .*? um so wenig wie möglich Zeichen zu matchen
  • nächte eindeutige Zeichenkette identifizieren, vor dem Wert, den ich will
  • Extraktion zwischen ()
Der Rest in der Doku... oder bei Beispiele.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Beispiel mit Regex101:
Bad Brückenauer Mineralwasser.*?newPrice.*?([\d,]+)

ZitatBad Brückenauer Mineralwasser matches the characters Bad Brückenauer Mineralwasser literally (case sensitive)
.*? matches any character (except for line terminators)
     *? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)
newPrice matches the characters newPrice literally (case sensitive)
.*? matches any character (except for line terminators)
     *? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)

1st Capturing Group ([\d,]+)
Match a single character present in the list below [\d,]+
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
\d matches a digit (equal to [0-9])
, matches the character , literally (case sensitive)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Marlen

DANKE!!!!

Zitatregex101

...is echt nicht schlecht!!

Marlen

Hallo,

ich wollte wieder eine HTTPMOD Devise anlegen und hab mir deshalb ein "altes" angeschaut!

Aber ich sehe hier nicht mehr das was Device liest, kein Output!

Es arbeitet aber noch richtig und liefert auch zuferlässig das richtige Ergebnis.

Hab sich hier was am Modul geändert? Oder warum sieht man das nicht mehr?

LG
  Malren

Marlen

Hallo,

weiß niemand, warum der Quellcode nicht mehr im Modul angezeigt wird?

LG
  Marlen

ph1959de

Zitat von: Marlen am 09 März 2018, 20:24:23
weiß niemand, warum der Quellcode nicht mehr im Modul angezeigt wird?
Ich vermute, Du meinst mit "Quellcode" das frühere Internal "buf"?

Wenn ich das richtig sehe, dürfte das jetzt über das Attribut "showBody" ein-/ausschaltbar sein. Wenn "eingeschaltet", sollte der Inhalt der Web Seite "be visible as internal httpbody".
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

Marlen

Ahhhh....danke, hatte das Attribut nicht, hab mal ein Update gemacht  ;)
Jetzt hab ich es und ee ist da!!!

Wenn man es setzt wird der Code angezeigt!!!

DANKE!!!  :-*

LG
  Marlen

Marlen

Jetzt bräuchte ich noch mal Hilfe!

Ich möchte das Datum "13.03.2018" selektieren.

class="indent"><p><b>Bauausschusssitzung: <a href="fileadmin/user_upload/Tagesordnung_13.03.2018.pdf" title="Initiates file download" class="download">(Tagesordnung)<br /></a></b> </p> <p><a href="fileadmin/user_upload/Tagesordnung_13.03.2018.pdf" title="Initiates file download" class="download"><b></b></a><br />Dienstag,&nbsp; 13.03.2018 - 16:00 Uhr </p></div><p>&nbsp;</p> <

Ich hatte das bisher so:
<b>Bauausschusssitzung.*[^0-9]+([0-9\.]+)
Das hat mir auch das Datum exakt geliefert.

Jetzt wurde die Tagesordnung eingefügt und ich bekomme als Ergebniss "13.03.2018."

Wie bekomm ich jetzt das Datum ohne den Punkt???

LG
  Marlen

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Marlen

Hmmm....ja, aber das zieht das Datum aber doch aus dem link zur Tagesordnung.....ich check das immer noch nicht wie man den Regex zusammensetzt!

Wenn die Tagesordnung nicht verlinkt ist (wird erst paar Tage davor) bekomme ich nur 18.03 oder?

Hab bis jetzt noch keine schöne Doku gefunden, wo das beschrieben ist so dass es auch blondis verstehen gefunden.

LG
  Marlen

ph1959de

Zitat von: Marlen am 12 März 2018, 20:07:07
.....ich check das immer noch nicht wie man den Regex zusammensetzt!
Ich denke, das wird schwierig - mit einer "regular expression" wirst Du auf Dauer erfolgreich nur Daten extrahieren können, die auch nach bestimmten Regeln strukturiert sind. Der Text, an dem Du Dich gerade abmühst, scheint aber recht willkürlich geändert zu werden.

Ich fürchte, da steht das Ergebnis in keiner Relation zum Aufwand für das Ermitteln der RegEx ... und das auch noch ohne Erfolgsgarantie.
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"