NEWS
Wert parsen von einer Webseite
-
Moin,
ich bräuchte mal eure Hilfe ...
Also, ich habe z.B. folgenden Text vom Quelltext einer Internetseite<div class="styled__Price-sc-dgnucy-7 hrukSM">4.019,199 €</div>
Mit
(?<=<div class="styled__Price-sc-dgnucy-7 hrukSM">)[\s\S]*?(?=<\/)
im Parser Adapter erhalte ich in ioBroker dann den Wert "4.019,199 €".
Soweit so gut.
Wie muss ich weiter vorgehen, um- den Wert ohne den Tausender Punkt
- dafür in der Dezimaltrennung einen Punkt anstatt des Kommas
- den ganzen Wert ohne das " €"
zu erhalten?
Es soll letztendlich nur der nackte Wert "4019,199" entstehen.
Kann man das vielleicht schon im RegEx des Parser Adapters lösen oder muss der Wert noch durch weitere Schritte bearbeitet werden?
Für Hilfe wäre ich echt dankbar.
Danke im voraus und Gruß aus dem hohen Norden
-
@smartin sagte: Es soll letztendlich nur der nackte Wert "4019,199" entstehen.
Als Zahl oder als String? Die Wandlung nach Zahl macht ein kleines Skript:
const idSrc = '0_userdata.0.abc'; // String "4.019,199 €" const idDst = '0_userdata.0.xyz'; // Zahl on(idSrc, function(dp) { setState(idDst, parseFloat(dp.state.val.replace('.', '').replace(',', '.')), true); });
-
@paul53
Hallo, danke für die Antwort.
Stimmt, hatte ich vergessen zu erwähnen. Ich habe den Wert bisher immer als String über ne andere Quelle bekommen und mein Script zur Weiterverarbeitung daher auch entsprechend geschrieben. Insofern wäre ein String natürlich streßloser, weil ich dann nicht viel ändern muss.
Kann man das auch so einfach lösen wie bei Zahl? -
@smartin sagte: Kann man das auch so einfach lösen wie bei Zahl?
const idSrc = '0_userdata.0.abc'; // String "4.019,199 €" const idDst = '0_userdata.0.xyz'; // String "4019.199" on(idSrc, function(dp) { setState(idDst, dp.state.val.replace('.', '').replace(',', '.').replace(' €',''), true); });
-
Warum ist dein Regex mit lookbehind und lookahead.
Es würde auch einfach das folgende reichen.
Im Parseradapter dann einfach Number (,) als Typ eintragen.
Dann speichert der parseradapter den Wert direkt als Number ohne javascript<div class="styled__Price-sc-dgnucy-7 hrukSM">([\d\,\.]+) €<\/div>
Eine Anleitung um das selbst nachzuvollziehen hatte ich hier mal geschrieben
https://forum.iobroker.net/topic/8379/einlesen-von-aktienkursen/81?_=1687886883098 -
@oliverio
"Warum ist dein Regex mit lookbehind und lookahead."
Weil ich so ein richtiger RegEx Held bin und eigentlich keine Ahnung habe, was ich da tue
Alles zusammen geklaut und gebastelt bis es einigermaßen funktionierte ...
Danke für das auf die Sprünge helfen!
Mit Deinem RegEx ist das €-Zeichen jetzt gleich weg. Allerdings lasse ich ihn auf String, dann war es hinterher (s.o.) leichter in mein Script einzubauen.
Ich habe jetzt sozusagen eine Mischung aus deinem RegEx und dem Script von @paul53 eingebaut, funktioniert super!Allerdings musste ich alle Regeln im Parser unter neuem Namen neu anlegen, weil die Datenpunkte im Objekte-Tab auf einmal nicht mehr aktualisiert wurden. Keine Ahnung was da passiert war, im Log konnte ich sehen, dass die Werte aktualisiert werden, aber der jeweilige Datenpunkt im Objekte-Tab blieb stur beim alten Wert. Auch eine De- und dann Neuinstallation des Parsers hat nichts gebracht, sobald ich eine Regel mit dem alten Namen neu angelegt habe, hat er sich den alten festgefrorenen Wert wieder reingeholt und ihn auch nicht aktualisiert. Die gleiche Regel mit einem neuen Namen hat er ganz normal aktualisiert.
Alles bezüglich meiner oben gestellten Fragen funktioniert also nun wie es soll, allerdings wüsste ich schon gerne wie ich die alten Einstellungen noch herauslöschen kann. Auch weil ich die alten Namen der Regeln schon gerne wieder verwenden würde.
Parser beenden, dann das Verzeichnis "iobroker.parser" unter /opt/iobroker/node_modules/ umbenennen und dann den Parser neu installieren? Oder gibt es eine Art "Cache löschen" Funktion, welche die alte Daten des Adapters in die Tonne tritt?
Vielleicht weiß noch jemand etwas dazu.Auf jeden Fall schon mal vielen Dank für die tolle Hilfe bei den Ursprungsfragen!
-
-
@oliverio sagte in Wert parsen von einer Webseite:
Evtl weiß @Homoran noch was.
wozu genau?
@smartin sagte in Wert parsen von einer Webseite:
Regeln im Parser unter neuem Namen neu anlegen, weil die Datenpunkte im Objekte-Tab auf einmal nicht mehr aktualisiert wurden
kenne ich auch, wenn nachträglich der Typ geändert wurde.
Allerdings nur für diese eine Regel.
Löschen dieser Regel und Neuanlegen (auch mit gleichem Namen) hat bei mir bisher immer geklappt.