FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: walter56 am 29 August 2014, 13:20:39

Titel: [Gelöst] Problem mit HTTPMOD und regex
Beitrag von: walter56 am 29 August 2014, 13:20:39
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
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: raspklaus am 29 August 2014, 15:14:09
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 (http://forum.fhem.de/index.php/topic,24646.0.html)

Für HTTPMOD

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

und

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


Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: walter56 am 29 August 2014, 16:41:01
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
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: raspklaus am 30 August 2014, 12:41:47
Wie heisst die Seite die du verarbeiten willst ?
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: Hollo am 30 August 2014, 13:13:14
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
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: walter56 am 30 August 2014, 23:21:30
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
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: fiedel am 31 August 2014, 09:32:48
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 
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: frank am 31 August 2014, 09:38:40
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/ (http://www.reso-gmbh.de/) unten links bei nächste termine einfacher an deine infos kommen.

gruss frank
Titel: Antw:Problem mit HTTPMOD und regex
Beitrag von: walter56 am 31 August 2014, 14:00:55
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 :)