Hallo zusammen,
ich möchte von www.boerse.de einige Aktienkurse holen, aber mir gelingt dies nicht. Folgender Quellcode, aus dem ich es herausholen möchte.
<div class="name nameGross" itemprop="name" >
Adidas Aktie
</div>
<td>aktueller Kurs:</td>
<td class="alignright">
<div class="nobr marginlessHeadline">
<span class="BW_PUSH">
<span class="" data-push-agse="291@16"
data-push-attribute="last" data-format-option="2"
data-sign=" EUR" >
166,98 EUR</span></span>
</div>
</td>
</tr>
<tr>
<td>Veränderung:</td>
<td class="alignright">
<div class="nobr marginlessHeadline">
<span class="BW_PUSH">
<span class="" data-push-agse="291@16"
data-push-attribute="perfInstAbs" data-format-option="2"
data-sign=" EUR" >
1,35 EUR</span>
</span>
</div>
</td>
</tr>
<tr>
<td>Veränderung in %:</td>
<td class="alignright">
<div class="nobr marginlessHeadline">
<span class="BW_PUSH">
<span class="" data-push-agse="291@16"
data-push-attribute="perfInstRel" data-sign=" %">0,82 %</span>
Mein Code sieht so aus:
define Aktie_Adidas HTTPMOD https://www.boerse.de/aktien/Adidas-Aktie/DE000A1EWWW0 300
attr Aktie_Adidas enableControlSet 1
attr Aktie_Adidas reading01Name Adidas Aktie
attr Aktie_Adidas reading01Regex itemprop="name" >Adidas Aktie<[\S\s\r\n]*?"data-push-attribute="last" data-format-option="2"data-sign=" EUR" >data-sign=" EUR" >\d+">(\d.\d{2}<[\S\s\r\n])
attr Aktie_Adidas reading02Name Prozentual
attr Aktie_Adidas reading02Regex ="perfInstRel" data-sign=" %">.*?(([01]?\d|2[0-3]):([0-5]?\d))
Bitte um Hilfe!
Gruß Lothar
reading01Regex nutz ich schon länger so:
attr Aktie_Adidas reading01Regex content="(\d+\.\d+)"
reading02Regex reim ich mir so zusammen:
attr Aktie_Adidas reading02Regex .*data-sign="">(\d+\,\d+)<?<\/span> <span class="cur">%<\/span><\/span>
Bei
attr Aktie_Adidas reading02Regex .*data-sign="">(\d+\,\d+)<?<\/span> <span class="cur">%<\/span><\/span>
kommt "unbekanntes Kommando"
reading01 geht!!!
Das Beispiel ist zwar ungetestet und zusammenkopiert gewesen, aber nachdem ich es jetzt mal ausprobiert habe, klappt das bei mir einwandfrei.
Etwas kürzer:
attr hmod_sq_adidas reading02Regex .*data-sign="">(\d+\,\d+).*?%<\/span>
Was ist wenn du den regexp einfach im Attribut einträgst, statt mit attr ?
klappt wunderbar. Danke!!!!
Gruß Lothar
war leider verfrüht.
reading02 wird nur einmal gelesen und dann nicht wieder.
Stimmt, sehe aber noch nicht woran es liegt.
Wenn du den Thread in den richtigen Forenbereich verschiebst, lesen und sind vlt. mehr User bereit sich überhaupt hier zu beteiligen.
Such Du bitte weiter!
Der Grund bei mir war der, das ich reading02Regex/Name nachträglich ergänzt hatte und event-on-change-reading nicht entsprechend um das reading ergänzt habe.
Bei mir klappt das dann doch einwandfrei:
defmod hmod_sq_adidas HTTPMOD https://www.boerse.de/aktien/Adidas-Aktie/DE000A1EWWW0 600
attr hmod_sq_adidas alias Adidas
attr hmod_sq_adidas event-on-change-reading quote,win,prozentual
attr hmod_sq_adidas reading01Name quote
attr hmod_sq_adidas reading01OExpr $val =~ s/\,/./g;; $val ## Umwandlung des Dezimalkommas in Dezimalpunkt
attr hmod_sq_adidas reading01Regex content="(\d+\.\d+)"
attr hmod_sq_adidas reading02Name prozentual
attr hmod_sq_adidas reading02Regex .*data-sign="">(\d+\,\d+).*?%<\/span>
attr hmod_sq_adidas room Boerse->Aktien
attr hmod_sq_adidas set01Local 1
attr hmod_sq_adidas set01Name number
attr hmod_sq_adidas set02Local 1
attr hmod_sq_adidas set02Name purchase
attr hmod_sq_adidas stateFormat <div style="text-align:left">Anzahl: number<br>Kaufpreis: purchase<br>Kurs: quote (percent %)<br>Gewinn: win</div>
attr hmod_sq_adidas timestamp-on-change-reading quote
attr hmod_sq_adidas userReadings win:quote:.* {usrquote($name,ReadingsNum($name,'number','0'),ReadingsNum($name,'purchase','0'))},\
percent:quote.* {usrpercent($name,ReadingsNum($name,'number','0'),ReadingsNum($name,'purchase','0'))}
attr hmod_sq_adidas verbose 5
attr hmod_sq_adidas webCmd reread
setstate hmod_sq_adidas <div style="text-align:left">Anzahl: number<br>Kaufpreis: purchase<br>Kurs: 166.72 (0.00 %)<br>Gewinn: 0.00</div>
setstate hmod_sq_adidas 2023-10-30 16:38:42 percent 0.00
setstate hmod_sq_adidas 2023-10-30 16:38:42 prozentual 0,66
setstate hmod_sq_adidas 2023-10-30 16:38:42 quote 166.72
setstate hmod_sq_adidas 2023-10-30 16:38:42 win 0.00
Danke nochmals für diene kompetente Hilfe. Den Quellcode muss ich erst mal verstehen!!!
Funktioniert, aber negative Werte werden nicht geloggt.
data-sign="">-0,51</span> <span class="cur">%</span></span>
sonst geht alles!
Gruss Lothar
(-?\d+\,\d+)
?
hat geklappt. Danke nochmal!!!
Kannst Du mir bitte noch mal helfen. Ich möchte die Ausgabe formatieren. Hab dazu folgendes erstellt, aber es funktioniert leider nicht.
define Kurse readingsGroup .*:Aktie
attr Kurse alias Kurse
Alle Kurse fangen mit "Aktie_" an.
Hier mal ein Beispiel was ich mir gebastelt hab, hat aber auch Optimierungspotential.
Du müsstest nur TYPE=HTTPMOD:number,quote:r2 anpassen:
defmod rg_Boerse readingsGroup TYPE=HTTPMOD:number,quote:r2,percent,win\
<hr>\
rg_Boerse:$sum(:1)@SU,<>,<>,$sum(:4)@SUM\
<hr>
attr rg_Boerse alwaysTrigger 2
attr rg_Boerse noheading 1
attr rg_Boerse nolinks 1
attr rg_Boerse room Boerse->Aktien
attr rg_Boerse valueFormat {"number" => '%.0f',"quote" => '%.2f', "percent" => '%.2f' , "win" => '%.2f',"SUM" => '%.2f' }
attr rg_Boerse valueStyle style="text-align:right"
attr rg_Boerse valueSuffix { "quote" => '€; ', "percent" => ' ;%; ;' }
setstate rg_Boerse 2023-10-31 15:59:58 SUM x.x
versteh ich leider nicht! Mein Code sieht folgendermaßen aus, am Beispiel von Adidas:
define Aktie_Adidas HTTPMOD https://www.boerse.de/aktien/Adidas-Aktie/DE000A1EWWW0 300
setuuid Aktie_Adidas 653fe35c-f33f-9284-5f78-84a811e0fa148801
attr Aktie_Adidas alias Adidas
attr Aktie_Adidas reading01Name Kurs
attr Aktie_Adidas reading01OExpr $val =~ s/\,/./g;; $val
attr Aktie_Adidas reading01Regex content="(\d+\.\d+)"
attr Aktie_Adidas reading02Name Prozent
attr Aktie_Adidas reading02OExpr $val =~ s/\,/./g;; $val
attr Aktie_Adidas reading02Regex .*data-sign="">(-?\d+\,\d+).*?%<\/span>
attr Aktie_Adidas room Boerse
attr Aktie_Adidas stateFormat Kurs, Prozent
attr Aktie_Adidas timeout 5