Hallo zusammen,
ich bekomme es trotz langem probieren nicht hin, deshalb erbitte ich schließlich Hilfe.
Ich habe folgenden HTTPMOD um mir den Goldkurs darzustellen:
defmod h_gold_unze HTTPMOD http://www.finanzen.at/rohstoffe/goldpreis/euro 3600
attr h_gold_unze userattr reading01Name reading01OExpr reading01Regex
attr h_gold_unze alias Gold [1 Unze]
attr h_gold_unze enableControlSet 1
attr h_gold_unze reading01Name gold_unze
attr h_gold_unze reading01Regex <th >(.*) <span>EUR</span></th>
attr h_gold_unze stateFormat gold_unze €
Funktioniert bestens, im STATE steht was ich sehen möchte:
Internals:
BUSY 0
DEF http://www.finanzen.at/rohstoffe/goldpreis/euro 5
Interval 5
LASTSEND 1509729304.50495
MainURL http://www.finanzen.at/rohstoffe/goldpreis/euro
ModuleVersion 3.4.0 - 9.9.2017
NAME h_gold_unze
NR 193
STATE 1 092,93 €
TRIGGERTIME 1509729309.5038
TRIGGERTIME_FMT 2017-11-03 18:15:09
TYPE HTTPMOD
addr http://www.finanzen.at:80
buf
code 200
conn
data
displayurl http://www.finanzen.at/rohstoffe/goldpreis/euro
header
host www.finanzen.at
httpheader HTTP/1.1 200 OK
Ich bin einer von der genauen Sorte und deshalb stört mich das Leerzeichen zwischen 1 und 0 beim Wert welches ich durch folgendes Regex durch einen Punkt ersetzen wollte:
attr h_gold_unze reading01OExpr $val =~ s/\s/\./;; $val
Es ändert sich dadurch jedoch leider nix am STATE.
Wenn ich "\s" versuchsweise durch "1" ersetze sehe ich: . 09....
D.h. reading01OExpr funktioniert im Prinzip, nur wird das Leerzeichen nicht von \s erkannt.
\s sollte doch die richtige Wahl sein, oder?
Besten Dank im Voraus.
Gruß
kroman
Das liegt daran, dass vom Webserver kein Leerzeichen, sondern ein non-breaking space in UTF-8 geliefert wird.
Versuche es mal mit "attr h_gold_unze reading01OExpr $val =~ s/\xc2\xa0/./;; $val".
Gruss Helmut
einen hab ich noch:
attr h_gold_unze reading01OExpr $val =~ s/(.)(.)(.*)/$1.".".$3/;; $val
Zitat von: helmut am 03 November 2017, 19:50:48
Das liegt daran, dass vom Webserver kein Leerzeichen, sondern ein non-breaking space in UTF-8 geliefert wird.
Versuche es mal mit "attr h_gold_unze reading01OExpr $val =~ s/\xc2\xa0/./;; $val".
Vielen Dank Helmut, das wars!
Zitat von: frank am 03 November 2017, 22:43:02
einen hab ich noch:
attr h_gold_unze reading01OExpr $val =~ s/(.)(.)(.*)/$1.".".$3/;; $val
Leider nein Frank, da kommt dann sowas raus:
1.".".�094,10
Damit würde es passen:
$val =~ s/(.)(.)(.)(.*)/$1.$4/; $val
Außer dass das € Zeichen am Ende fehlt.
Warum funktioniert stateFormat hier nicht?
Damit bin ich dann also auch zufrieden:
$val =~ s/(.)(.)(.)(.*)/$1.$4 €/; $val
Doch ich werde Helmut's Lösung behalten, die schaut schöner aus :)
Danke dennoch und schönes Wochenende an euch beide.
Sorry, das mit den stateFormat war Schwachsinn, ich hab an der falschen Stelle geschaut.
Das passt also auch:
$val =~ s/(.)(.)(.)(.*)/$1.$4/; $val
Klappt sein Setup noch?
Ich habe es vor zwei Stunden mal auf meinem Test System eingepflegt, ich bekomme keinen Wert geliefert.
Hi,
geht nicht mehr, da die Seite von Tabelle auf Div-Tags umgestellt hat. Da müsste also die Regex angepasst werden...
Grüße,
j.
Habe das nun mal wie folgt angepasst:
define h_gold_unze HTTPMOD http://www.finanzen.net/rohstoffe/goldpreis 600
attr h_gold_unze alias Gold [1 Unze]
attr h_gold_unze alignTime 00:00
attr h_gold_unze enableControlSet 1
attr h_gold_unze group Devisen
attr h_gold_unze reading01Format %.2f
attr h_gold_unze reading01Name gold_unze
attr h_gold_unze reading01OExpr $val =~ s/\xc2\xa0/./;;;; $val =~ s/\.//g;;;; $val =~ s/\,/\./g;;;; $val;;
attr h_gold_unze reading01Regex >(.*) <span>EUR</span>
attr h_gold_unze room HTTPMOD
attr h_gold_unze stateFormat gold_unze €
läuft so bei mir aktuell zuverlässig...