[Gelöst] Problem mit HTTPMOD und regex

Begonnen von walter56, 29 August 2014, 13:20:39

Vorheriges Thema - Nächstes Thema

walter56

Hallo zusammen :)
Ich bäuchte mal Expertenhilfe. :) Ich versuche jetzt seit 3Wochen :-[ schon von der Internetseite den aktuellen Müllkalender auszulesen. Ziel ist es morgens anzuzeigen welche Mülltonne heute auf die Straße gestellt werden muss. Dazu habe ich das Modul HTTPMOD verwendet. Leider scheitere ich aber immer an der Regex. Auch ein Vergleich mit anderen Beispielen hat nicht zum Erfolg geführt. Vielleicht ist der Aufbau der Internetseite zu kompliziert?

Lösungsansatz ::): 20.2.2014 zuerst nur mal den Tag 20 später dann die Wiederholung 2 => Februar

define AbfallReso HTTPMOD http://www.reso-gmbh.de/extern/muellkalender_komune_html.php?sid=2&sname=Michelstadt&loc=extern 120
attr AbfallReso group Abfallkalender
attr AbfallReso readingsName1 Tonne
attr AbfallReso readingsRegex1 >20<.*?"left">(.*?)<\/td>
attr AbfallReso room Testraum
attr AbfallReso stateFormat {sprintf("-%s-", ReadingsVal($name,"Tonne",0))}
attr AbfallReso timeout 20

Um den Ausdruck für die Regex zu finden habe ich über die Seite www.regex.de mir Hilfe geholt.  ;)
Die interne Variable buf  von HTTPMOD kopiere ich in www.regex.de hier kann ich dann schnell das Ergebnis sehen ::). Ich habe einfach angefangen. Wenn ich die Ergebnisse (regex) von www.regex.de  in HTTPMOD übertrage, habe ich kein Erfolg. ???

Ich suche erst mal den 20 Tag  >20<
jetzt alle Zeichen überlesen   .*?
bis die Zeichenfolge kommt    left">
Jetzt den Suchstring einlesen   (.*?)
bis Ende Suchstring      <\/td>

Ergebnis:   >20<.*?"left">(.*?)<\/td>

Unter www.regex.de kann ich den unter Gruppe1 das Ergebnis sehen :D! Leider habe ich mit HTTPMOD  wie gesagt keinen Erfolg! :-\

Die verschiedensten Kombinationen habe ich schon ausgeführt alles ohne Erfolg: :'(

Hier eine kleine Auswahl für regex die ich getestet habe als Ergebnis sollte: Papier 1 herauskommen

>20</td> <td width="20" align="eft">..</td> <td width="116" align="left">(.*?)<\td>
>20<\/td> <td width="20" align="eft">..<\/td> <td width="116" align="left">(.*?)<\/td>
>20<\/td> <td width="20" align="eft">..<\/td> <td width="116" align="left">([\w, ]*)
>20<.td>.<td width="20".align="eft">..<.td>.<td.width="116".align="left">(.*?)<\/td
>20<.*?"left">(.*?)<\/td>
>20<.*?"left">([\w,. ]*)

Vielleicht kann mir ein Profi erklären wie man bei solchen Problemen vorgeht? ???
Gibt es eine Seite mit der man die Regex testen kann, so wie sie in HTTPMOD funktioniert? ???
Kann man nur durch probieren zur regex finden? :(
Vielen Dank schon mal!
Gruß Walter
Raspberry Pi mit HMLAN & EnOcean: Eltako FUD14, FB dect: DECT 200,HomeMatic: HM-LC-Bl1PBU-FM, HM-SWI-3-FM,HM-CC-RT-DN, HM-Sen-MDIR-O,HM-WDS10-TH-O, HM-WDS40-TH-I
Abfragen: Solarlog, Telefon, Internet Radio, TTS und abfrage verschiedenen Interenseiten HTTPMO

raspklaus

Such mal im Forum nach Abfallkalender bzw Benzinpreise.

Den Müllkalender gibt es bei vielen Landratsämtern als Calenderdatei zum Download

Hier der Threat zum Thema

http://forum.fhem.de/index.php/topic,24646.0.html

Für HTTPMOD

http://forum.fhem.de/index.php/topic,24646.0.html

und

http://forum.fhem.de/index.php/topic,22554.0.html



walter56

#2
Hallo  :)
Leider ist das ein privates Unternehmen das liefert keinen Terminkalender. Nur eine Webseite zum Ausdrucken! ???

Ich verstehe auch nicht warum die Ergebnisse von HTTPMOD nicht mit den Internettestseiten  www.regexe.de übereinstimmen.

Ich habe versucht ein funktionierendes HTTPMOD -Beispiel mit www.regexe.de  zu verstehen aber das funktioniert auch nicht (http://forum.fhem.de/index.php?topic=24459.0)

Scheinbar bin ich blind. 8)

Gruß Walter
Raspberry Pi mit HMLAN & EnOcean: Eltako FUD14, FB dect: DECT 200,HomeMatic: HM-LC-Bl1PBU-FM, HM-SWI-3-FM,HM-CC-RT-DN, HM-Sen-MDIR-O,HM-WDS10-TH-O, HM-WDS40-TH-I
Abfragen: Solarlog, Telefon, Internet Radio, TTS und abfrage verschiedenen Interenseiten HTTPMO

raspklaus

Wie heisst die Seite die du verarbeiten willst ?

Hollo

Zitat von: raspklaus am 30 August 2014, 12:41:47
Wie heisst die Seite die du verarbeiten willst ?
Hat er doch oben mit angegeben.  ;D
define AbfallReso HTTPMOD http://www.reso-gmbh.de/extern/muellkalender_komune_html.php?sid=2&sname=Michelstadt&loc=extern 120
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

walter56

Hallo :)
Ich experimentiere gerade mit  ???

attr AbfallReso readingsRegex1 >Februar<.*?>20<.*?"left">([\w,. ]+)

Dieser Ausdruck kommt auf der Internetseite nur einmal vor. Ich hatte den Gedanken, dass HTTPMOD kein Ergebnis liefert wenn es mehrere Treffer gibt. ::)

Zur der regex     
>Februar<.*?>20<.*?"left">([\w,. ]+)
bin ich wie folgt gekommen--> Gesucht Abfalltonne vom 20 Februar
Suche den Monat:        >Februar<
überlese alles:               .*?
bis zu 20igten Tag:       >20<
überlese alles               .*?
bis                               "left">
jetzt der Suchstring       ([\w,. ]+)

Eigentlich sollte jetzt das Ergebnis: Bio 1, Papier 2 erscheinen :( leider immer noch kein match!
Ich teste zur Zeit mit Notepad++ meine regex, da scheint sie zu funktionieren!

Gruß und gute Nacht Walter
Raspberry Pi mit HMLAN & EnOcean: Eltako FUD14, FB dect: DECT 200,HomeMatic: HM-LC-Bl1PBU-FM, HM-SWI-3-FM,HM-CC-RT-DN, HM-Sen-MDIR-O,HM-WDS10-TH-O, HM-WDS40-TH-I
Abfragen: Solarlog, Telefon, Internet Radio, TTS und abfrage verschiedenen Interenseiten HTTPMO

fiedel

Hi Walter,

es gibt ja mehrere Internetseiten, wo man regex online erstellen und/oder testen kann. Hast du sowas schon mal probiert?

OT: Ich wette in deiner Gegend sind besonders die Frauen aus Weiten-Gesäß sehr begehrt...  ;D

Gruß

Frank 
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

frank

wahrscheinlich sind zeilenümbrüche dein problem. schreibe "(?s)" vor deine regex, dann wird der "." multilinefähig. also:
attr AbfallReso readingsRegex1 (?s)>Februar<.*?>20<.*?"left">([\w,. ]+)

trotzdem habe ich das gefühl, dass du dein projekt etwas überdenken solltest. mit httpmod kann man in regelmässigen abständen auf webseiten an bestimmten stellen etwas auslesen. das macht aber eigentlich nur sinn, wenn sich an der stelle auch regelmässig etwas ändert. also dynymische werte. in deinem fall wird sich aller voraussicht nach aber nur einmal im jahr etwas verändern. und wer weiss, wie die informationen nächstes jahr codiert sind.

da ist es auf alle fälle einfacher die termine in eine datei zu schreiben und mit dem modul holiday zu arbeiten.

eventuell kannst du über diese seite http://www.reso-gmbh.de/ unten links bei nächste termine einfacher an deine infos kommen.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

walter56

Hallo Fank

:) DANKE :) DANKE :) Danke :)

Das (?s) war die Lösung! :D Ich habe von HTTPMOD den buf Inhalt immer kopiert und in Notepad++ und in einigen Internet Seiten, zum Testen von regex, wurde alles immer in einer Zeile angezeigt. So bin ich nicht auf die Lösung gekommen, dass Zeilenumbrüche  schuld sind. Auch war mir nicht bekannt, dass ich das in Klammer schreiben muss. Zum Projekt Abfalltonne: Mir ist klar, das ich diese Seite nicht alle 120 sec. abfragen muss. (nur im Testfall) Ich wollte es alle 24 Std. oder 1 mal die Woche abfragen. Ich wollte nicht jedes Jahr eine Liste erstellen, mit vielen Fehlern beim erstellen. Ich will ja alles automatisieren! ;)

Hallo fiedel
Ich habe verschiedene Internetseiten zum Testen von regex benutzt bin aber nicht zur Lösung gekommen. Da ich jetzt die Lösung kenne werde ich das aber noch mal testen. (Um mein gelerntes zu vertiefen! ;))
O.T. Übrigens wenn due schon den kleinen Ort Weiten-Gesäß kennst, dann kennst du Sicher auch den schönsten Ort im Odenwald ;) Ich wohne hier :D!!

Gruß Walter :)

Raspberry Pi mit HMLAN & EnOcean: Eltako FUD14, FB dect: DECT 200,HomeMatic: HM-LC-Bl1PBU-FM, HM-SWI-3-FM,HM-CC-RT-DN, HM-Sen-MDIR-O,HM-WDS10-TH-O, HM-WDS40-TH-I
Abfragen: Solarlog, Telefon, Internet Radio, TTS und abfrage verschiedenen Interenseiten HTTPMO