Hallo,
ich möchte über FHEM automatisch das EPG meines Receivers nach bestimmten Sendungen durchsuchen. Das Durchsuchen mit z.B:
get EPG_SEARCH query Wilsberg
funktioniert und ich bekomme alle Ergebnisse in einem "Treffer" Reading:
HTTPMOD EPG_SEARCH Treffer-1: Wilsberg
HTTPMOD EPG_SEARCH Treffer-2: Wilsberg
HTTPMOD EPG_SEARCH Treffer-3: Wilsberg
HTTPMOD EPG_SEARCH Treffer-4: Wilsberg
HTTPMOD EPG_SEARCH Treffer-5: Wilsberg
HTTPMOD EPG_SEARCH Treffer-6: Wilsberg
Ich möchte aber eigentlich nur die Anzahl der Treffer also "6" oder noch besser "Wilsberg (6)" als Reading haben.
Kann man das irgendwie mit REGEX abbilden?
Hier meine Geräte Definition:
defmod EPG_SEARCH HTTPMOD http://vuduo2/web/epgsearch?search=$val&bRef=1:7:1:0:0:0:0:0:0:0:FROM%20BOUQUET%20%22userbouquet.favourites.tv%22%20ORDER%20BY%20bouquet
attr EPG_SEARCH userattr get01Name reading01Name reading01RegOpt reading01Regex
attr EPG_SEARCH DbLogExclude .*
attr EPG_SEARCH get01Name query
attr EPG_SEARCH reading01Name Treffer
attr EPG_SEARCH reading01RegOpt g
attr EPG_SEARCH reading01Regex <e2eventtitle>([^>]*)<\/e2eventtitle>
Ludger
Bitte ein "list EPG_SEARCH" und die Log mit verbose 5 auf dem HTTPMOD liefern. Hier hat man nicht mal das HTML/XML/Json von der Antwort. Wie kann man regex analysieren/aufbauen?
Beim Aufbereiten der Daten für die Antwort ist mir klar geworden dass sich HTTPMOD für meine Anwendung gar nicht lohnt, weil zu komplex.
Ich werde wohl eine 99_myUtils.pm Routine dafür schreiben.
Danke
Dann pass auf, die Funktion HttpUtils_NonblockingGet zu nutzen, wie HTTPMOD macht. Ein blocking Call mit qx(curl) o.ä kann dein ganzes FHEM still legen, so lange dein Receiver nicht geantwortet hat.
Hinweise hier: https://wiki.fhem.de/wiki/Blocking_Call
EDIT: Ein HTTPMOD mit einfacher Benutzung wie die Abholung von ein paar Werte ist ganz einfach. Man muss nur die richtige regexp finden.
define epg HTTMOD <url> <interval>
attr epg reading01Name name
attr epg reading01Regex <regex>
und es ist schon erledigt. Mit einer perl Routine wirst Du so wie so die HTML Antwort parsen müssen...