FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: LotharRappsilber am 30 Oktober 2023, 14:51:39

Titel: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 14:51:39
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&nbsp;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&nbsp;in&nbsp;%:</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
Titel: Aw: Parsen
Beitrag von: TomLee am 30 Oktober 2023, 15:24:49
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>&nbsp;<span class="cur">%<\/span><\/span>
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 15:35:55
Bei

attr Aktie_Adidas reading02Regex .*data-sign="">(\d+\,\d+)<?<\/span>&nbsp;<span class="cur">%<\/span><\/span>

kommt "unbekanntes Kommando"
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 15:37:38
reading01 geht!!!
Titel: Aw: Parsen
Beitrag von: TomLee am 30 Oktober 2023, 15:43:31
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 ?
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 15:52:23
klappt wunderbar. Danke!!!!

Gruß Lothar
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 16:04:28
war leider verfrüht.

reading02 wird nur einmal gelesen und dann nicht wieder.
Titel: Aw: Parsen
Beitrag von: TomLee am 30 Oktober 2023, 16:15:05
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.
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 16:21:03
Such Du bitte weiter!
Titel: Aw: Parsen
Beitrag von: TomLee am 30 Oktober 2023, 16:48:47
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
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 30 Oktober 2023, 16:54:04
Danke nochmals für diene kompetente Hilfe. Den Quellcode muss ich erst mal verstehen!!!
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 31 Oktober 2023, 12:55:02
Funktioniert, aber negative Werte werden nicht geloggt.

data-sign="">-0,51</span>&nbsp;<span class="cur">%</span></span>

sonst geht alles!

Gruss Lothar
Titel: Aw: Parsen
Beitrag von: TomLee am 31 Oktober 2023, 13:34:28
(-?\d+\,\d+)
?
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 31 Oktober 2023, 14:01:50
hat geklappt. Danke nochmal!!!
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 31 Oktober 2023, 15:47:38
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.
Titel: Aw: Parsen
Beitrag von: TomLee am 31 Oktober 2023, 16:08:06
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" => '&#8364;;&nbsp', "percent" => '&nbsp;;&#037;;&nbsp;;' }

setstate rg_Boerse 2023-10-31 15:59:58 SUM x.x
Titel: Aw: Parsen
Beitrag von: LotharRappsilber am 31 Oktober 2023, 16:35:09
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