NEWS
Parsen EUR/CHF
-
Hallo iobroker-Freunde.
Ich würde gerne den aktuellen Kurswert EUR/CHF aus einer Website mittels Parser-Adapter "auslesen".
Ich kenne mich mit Regex leider überhaupt nicht aus - meine Versuche den richtigen Wert auszulesen waren bisher erfolglos.Kann mir bitte jemand helfen aus dieser Seite den Wert auszuwerten - bzw. wie würde der richtige Regex Syntax lauten.
https://www.finanzen.at/devisen/euro-schweizer_franken-kursDanke
LG Andy -
@andyf2000 Installier dir radar2.0, der liefert dir das
-
@andyf2000 Weshalb nimmst du nicht einfach den Radar2 Adapter?
https://github.com/frankjoke/ioBroker.radar2
Der kann das schon.
-
@UncleSam
Danke. Nicht schlecht was der Adapter alles kann.Aber mir scheint die Werte (Währung) werden nur einmal am Tag aktualisiert.
Momentan zeigt er mir sogar nur den Kurs von gestern an.Andy
-
@andyf2000 Was willst du denn?
nur den "Faktor"? -
@Homoran die (momentan) 1,0800 CHF würde ich gerne auslesen.
-
@andyf2000 sagte in Parsen EUR/CHF:
@Homoran die (momentan) 1,0800 CHF würde ich gerne auslesen.
([\d,]+)<.+CHF
ich hoffe das ist es, aber der wechselt so schnell
-
@Homoran Danke für deine Hilfe - da steht jetzt aber konstant die "783"
Es müsste aber ein Wert von ca. 1,0800 sein. -
@andyf2000 Versuch es mit:
EURCHF"[^\/]+>([\d,]+)<.+CHF
-
@andyf2000
probier mal mit typ = number(,)data-animation=".*".>(.*)<\/span><\/div> <span class="currency-iso">CHF
-
@UncleSam said in Parsen EUR/CHF:
EURCHF"[^/]+>([\d,]+)<.+CHF
Damit klappt es! Super, Danke für die Hilfe.
LG Andy
-
@andyf2000 sagte in Parsen EUR/CHF:
Danke für deine Hilfe - da steht jetzt aber konstant die "783"
Es müsste aber ein Wert von ca. 1,0800 sein.das kam bei mir auch raus
@UncleSam sagte in Parsen EUR/CHF:
Versuch es mit:
Das geht auf die selbe Group.
Hast du eine Ahnung warum "mein" RegEx nicht klappt? -
@Homoran sagte in Parsen EUR/CHF:
Hast du eine Ahnung warum "mein" RegEx nicht klappt?
nicht wirklich, die Werte wechseln sehr schnell, schaut man mit F12 in Chrome dann sieht man nur einen Wert
Hier mal eine Alternative zu RegEx, hier wird mittels cheerio das Dom durchsucht, ähnlich wie mit jQuery im Browser. Ich nutze das seit Neuestem ständig, evtl dann noch mit RegEx zusätzlich. Für mehr Infos googlen
/** * Wechselkurse mit cheerio auslesen */ const axios = require('axios').default; // In der JS-Instanz unter Module eintragen const cheerio = require('cheerio'); // In der JS-Instanz unter Module eintragen async function getData() { const url = 'https://www.finanzen.at/devisen/euro-schweizer_franken-kurs'; let html = cheerio.load((await axios.get(url)).data); let kurs = Number(html('span.push-data').first().text().replace(',','.')); let currency = html('span.currency-iso').text(); return kurs.toFixed(4) + ' ' + currency; } async function Kurs(){ log(await getData()); } Kurs();
-
@Homoran Du darfst nicht den aktuellen Baum anschauen sondern den Quellcode. Da dies eine dynamische Seite ist, muss man den ursprünglichen Quellcode nehmen (das ist ja auch, was der Parser sieht).
-
@UncleSam sagte in Parsen EUR/CHF:
Du darfst nicht den aktuellen Baum anschauen sondern den Quellcode
mache ich immer (rechte Maustaste auf der Website und Quellcode anzeigen)
@UncleSam sagte in Parsen EUR/CHF:
das ist ja auch, was der Parser sieht
Ist klar.
und damit funktioniert es bei regex101.com mit meinem und deinem RegEx
Dein RegEx konnte ich auch (fast) verifizieren, lediglich fand ich keinen/
in dem Text vor dem Kurs, erst danach.Aber ich wüsste gerne warum mein RegEx im Parser-Adapter nicht funktioniert.
Ich weiß, dass der Parser-Adapter beispielsweise keine Zeilenumbrüchen als RegEx akzeptiert. Das ist aber hier nicht das Problem -
@Homoran sagte in Parsen EUR/CHF:
mache ich immer (rechte Maustaste auf der Website und Quellcode anzeigen)
zeigt das wirklich nur die daten an, die der browser vorm server abgerufen hat?
oder ist das schon das dynamische html, an dem javascript bereits rum gepfuschelt hat?ich schau immer in den developer tools unter netzwerk, was der tatsächlich abgerufene content ist.
-
@OliverIO sagte in Parsen EUR/CHF:
oder ist das schon das dynamische html, an dem javascript bereits rum gepfuschelt hat?
Nein, das ist der echte native Quelltext,, in dem manchmal die dynamisch generierten Werte gar nicht enthalten sind, sondern nur der "link" zur Datenbank
-
@Homoran Wahrscheinlich war auf der Website noch irgendwo sonst ein "CHF" auf derselben Zeile wie ein Zahlenwert. Ich habe einfach noch ein "eindeutigeres" Merkmal davor gesetzt, damit es "eindeutiger" ist.
-
@UncleSam sagte in Parsen EUR/CHF:
@Homoran Wahrscheinlich war auf der Website noch irgendwo sonst ein "CHF" auf derselben Zeile wie ein Zahlenwert. Ich habe einfach noch ein "eindeutigeres" Merkmal davor gesetzt, damit es "eindeutiger" ist.
Das ist möglich, aber auf regex101.com finden unsere beiden RegEx exakt den gleichen Match.