FHEM Forum

FHEM => Sonstiges => Thema gestartet von: abc2006 am 27 Oktober 2017, 01:48:04

Titel: HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 27 Oktober 2017, 01:48:04
Hi,
ich habe HTTPMOD entdeckt und wollte damit den aktuellen Kurs von Bitcoins anzeigen.


http://bitcoin.de/de

die fragliche Stelle ist:

    <div class="col-md-6 text-center text-right-md fs12 lh2em">
        Aktueller Bitcoin Kurs:       
          <img alt="EUR" class="ticker_arrow mbm3 g90" src="/images/s.gif" />       
          <strong id="ticker_price">5.054,03 €</strong>
        <span class="c4">
        ( Stand 27.10.17 01:33 )
    </span>
    </div>
</div>


Könnte mir bitte jemand aufs Pferd helfen,
warum

id="ticker_price">(.*)<
einwandfrei funktioniert,
Fehler gefunden:
id="ticker_price">(.*)\s*€<

aber
\d\.\d\d\d.\d\d
und
\d\.\d\d\d,\d\d

hingegen nicht?

Alle drei Lösungen werden von https://regexr.com/ (https://regexr.com/) als gültig eingestuft... Ich blicks nicht...

Danke schonmal und Grüße,

Stephan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: andies am 27 Oktober 2017, 08:53:41
Hast du mal hinten statt . ein Komma genommen? Ich finde Regex immer geheimnisvoll...


Gesendet von iPad mit Tapatalk Pro
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: frank am 27 Oktober 2017, 09:46:21
ich hatte schon öfter probleme mit "leerzeichen".
manchmal sind es mehrere oder tabs oder ...
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: StefanStrobel am 30 Oktober 2017, 14:22:42
Die () darf man nicht vergessen. HTTPMOD nimmt immer den Inhalt der ersten Sub-Expression um den Wert des Readings festzulegen. Ohne Klammern keine Sub-Expression ...

Gruß
    Stefan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: jostmario am 02 Dezember 2017, 00:14:03
Hallo,

hast du auch eine Idee wie ich den Wert zu verkaufende Bitcoins auslesen kann ?
https://www.bitcoin.de/de/btceur/market

Gruß Josty
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 02 Dezember 2017, 00:41:17
Hi,
die Bitcoins lese ich mit dem Regexp


id="ticker_price">(.*)<


aus.
Wenn du den Verkaufspreis brauchst, musst du wahrscheinlich weiter unten in der Seite suchen..
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 02 Dezember 2017, 09:37:58
Hier,

versuchs mal so. Bei mir gehts:

id="rate_buy".*?>\s(.+?)\s*<

kann man gut mit
https://regexr.com/3hdrd
(https://regexr.com/3hdrd)

testen ...

Grüße,
Stephan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: jostmario am 02 Dezember 2017, 12:30:11
Hallo,

ja Danke das ist das Regex für zu Kaufen für .... €    das ist auch nicht schlecht.
Kannst du noch das Regex für zu verkaufen und anzahl der zu verkaufenden Bitcoins generieren.
habe versucht aber bekomme das nicht hin sind irgendwie nur Hyroglyphen in dem Regex :-)
Die Blau umrandeten habe ich die Rot umrandeten fehlen mir noch im angehängten Bild.

Gruß Josty
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 02 Dezember 2017, 12:42:21
Zeig mal deine Versuche ...

Grüße,
Stephan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: jostmario am 02 Dezember 2017, 12:54:39
Hallo,

naja habe nicht direkt versuche da ich mir mit den String Operatoren schwer tue was sie genau bedeuten.

habe das benötigte mal in die von dir vorgegeben seite eingetippt.

Gruß Josty
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: DeeSPe am 02 Dezember 2017, 13:14:33
Hatte das auch schon mal umgesetzt.

Damit funktioniert es ganz gut:
defmod Bitcoin HTTPMOD https://www.bitcoin.de/de/btceur/market 60
attr Bitcoin userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
attr Bitcoin event-on-change-reading .+
attr Bitcoin reading01Name ticker_price
attr Bitcoin reading01Regex id="ticker_price">(.*).....<
attr Bitcoin reading02Name rate_buy
attr Bitcoin reading02Regex id="rate_buy" data-rate="(.*)">
attr Bitcoin reading03Name rate_sell
attr Bitcoin reading03Regex id="rate_sell" data-rate="(.*)">
attr Bitcoin reading04Name bitcoins
attr Bitcoin reading04Regex class="c1.fs16">\s+(\d+)......BTC
attr Bitcoin removeBuf 1
attr Bitcoin room HTTPMOD
attr Bitcoin stateFormat ticker_price €
attr Bitcoin userReadings rate:ticker_price.* {my $v = ReadingsVal($name,"ticker_price",0);; $v =~ s/\.//g;; $v =~ s/,/./;; $v},\
buy:rate_buy.* {my $v = ReadingsVal($name,"rate_buy",0);; $v =~ s/\,//g;; $v},\
sell:rate_sell.* {my $v = ReadingsVal($name,"rate_sell",0);; $v =~ s/\,//g;; $v}


Die userReadings sind nur da um die Daten für's Loggen richtig zu formatieren.

Gruß
Dan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 02 Dezember 2017, 13:15:53
Zitatda ich mir mit den String Operatoren schwer tue was sie genau bedeuten

ist in diesem Beispiel gar nicht so schwer.
du tippst erstmal das ab, was *immer* gleich bleibt:

Zitatzu verkaufende Bitcoins:</span><br/> <strong class="c1 fs16"> 759&nbsp;BTC
dann überlegst du dir, welcher Teil sich ändern wird:
Zitatzu verkaufende Bitcoins:</span><br/> <strong class="c1 fs16"> 759&nbsp;BTC

und das ersetzt du durch einen operator, der dir genau eine oder mehrere Ziffern ermöglicht
Zitat\d+

Zitatzu verkaufende Bitcoins:</span><br/> <strong class="c1 fs16"> \d+&nbsp;BTC

schon gehts. Aber halt, was passiert, wenn mehr als 1000 Bitcoins zu verkaufen sind?
Ich weiss leider gerade nicht, ob dann, wie beim Preis, eine tausender-trennstelle eingefügt wird.
Also, fangen wir diesen Punkt auch noch ab:
a) beliebig viele Ziffern, auch "keine" : "\d*"
b) ein Punkt, oder auch kein Punkt ".?"
c) wieder ziffern, aber mindestens eine und maximal 3: "\d{1,3}"
ergibt

Zitatzu verkaufende Bitcoins:</span><br/> <strong class="c1 fs16"> \d*\.?\d{1,3}&nbsp;BTC

so, und damit die Zahl jetzt noch als Rückgabewert geliefert wird, müssen wir die Klammern um das setzen, was wir haben wollen:

Zitatzu verkaufende Bitcoins:</span><br/> <strong class="c1 fs16"> (\d*\.?\d{1,3})&nbsp;BTC


Ich bin bestimmt nicht der RegExp-Hero, aber so funktioniert es, und da das Einsatzgebiet nicht sonderlich groß und/oder variabel ist, sollte das auf längere Sicht passen...

Über Ideen und Kritik freu ich mich natürlich auch immer ;)

Grüße,
Stephan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: jostmario am 02 Dezember 2017, 18:43:39
Hey  Danke für deine aufwändige aufschlüsselung,
hab es jetzt hinbekommen.

mit dem Besipiel von dir und DeeSPe

Gruß Josty
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 02 Dezember 2017, 18:59:35
Bleib dran  ;)
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: Schlimbo am 18 Dezember 2017, 21:24:58
Zur Info bitcoin.de hat auch eine API, hiermit sollte es doch
wesentlich einfacher sein, an die Daten zu kommen:

https://www.bitcoin.de/de/api/marketplace (https://www.bitcoin.de/de/api/marketplace)
ZitatDie Bitcoin.de API ermöglicht Ihnen den Zugriff auf die Übersicht der erfolgreich abgeschlossenen Trades (Tradehistory), der aktuellen Kauf- und Verkaufsangebote (Orderbook) und den aktuellen Bitcoin.de-Kurs (Rate).

Die API ist als JSON Webservice angelegt, bei dem alle Ressourcen über eine zentrale URL angesprochen werden. Die API ist ausschließlich über HTTPS und somit verschlüsselt erreichbar.

Der Zugriff auf die API ist auf max. 2 Abfragen je 60 Sekunden beschränkt. Tradehistory und Orderbook werden alle 60 Sekunden aktualisiert.
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: jostmario am 18 Dezember 2017, 23:46:55
Hallo,

Die API hab ich freigeschaltet bei Bitcoin.de leider fehlt mir das wissen das in fhem einzubinden.
Könnte ich damit nicht auch aus fhem heraus Bitcoin Kaufen ?

Gruß Josty
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 18 Dezember 2017, 23:52:20
ZitatKönnte ich damit nicht auch aus fhem heraus Bitcoin Kaufen ?
das .. klingt teuer...

Grüße,
Stephan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: Mickey am 12 Januar 2021, 20:30:04
Hallo liebe Fhem`ler,

ich bin ja der "Paste and Copie" Michi.
Hat bis jetzt auch wunderbar geklappt.

Leider habe ich keinen Plan und weiss nicht warum im Beispiel von DeeSPe:


attr Bitcoin reading01Name ticker_price
attr Bitcoin reading01Regex id="ticker_price">(.*).....<

attr Bitcoin reading04Name bitcoins
attr Bitcoin reading04Regex class="c1.fs16">\s+(\d+)......BTC


die 2 readings bei mir nicht funktionieren.

Kann ein Experte bitte mal darüber sehen?

Ich wäre sehr dankbar

Liebe Grüße, Michael
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 12 Januar 2021, 20:32:13
Weil Bitcoin.de die Seite verändert hat.
versuchs mit

id="ticker_price.*?">(.*)<


beim 04 kann ich so ad-hoc nicht weiterhelfen, da musst du mal in den Quellcode der Bitcoin-Seite schauen.

Grüße,
Stephan
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: Mickey am 12 Januar 2021, 20:39:45
WOW --> 1000 mal danke Stephan,

das ging echt super und hat sofort geklappt.
Bin dir sehr dankbar, danke!

Zitat
ticker_price
28.700,51 €

Vielleicht hat ja jemand eine Idee zu 04?
Ich tue mich mit lesen etwas schwer, sorry ist aber so.

Liebe Grüße, Michael
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: abc2006 am 12 Januar 2021, 20:49:33
was soll denn in 04 drinstehen?
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: Mickey am 12 Januar 2021, 20:54:06
abc2006, ich kann nur vermuten
Die Bitcoins die er gekauft hat?

attr Bitcoin reading04Name bitcoins
attr Bitcoin reading04Regex class="c1.fs16">\s+(\d+)......BTC


Ich vermute mal, es ist gar nicht so wichtig.

Liebe Grüße, Michael
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: Mickey am 12 Januar 2021, 21:05:33
Stephan, kannst du mir bitte noch eine Gefallen tun, mal über das userReading sehen?

rate:ticker_price.* {my $v = ReadingsVal($name,"ticker_price",0); $v =~ s/\.//g; $v =~ s/,/./; $v},\ buy:rate_buy.* {my $v = ReadingsVal($name,"rate_buy",0); $v =~ s/\,//g; $v},\ sell:rate_sell.* {my $v = ReadingsVal($name,"rate_sell",0); $v =~ s/\,//g; $v}

Da kommt nur das Reading "rate" (rate:ticker_price.*)

Sorry, wenn ich dich stresse aber ich checke es leider nicht.

Liebe Grüße, Michael
Titel: Antw:HTTPMOD regex Verständnisproblem
Beitrag von: Mickey am 12 Januar 2021, 21:11:01
Upsi, da waren nur 2 / zu viel - jetzt klappt es.
Für meine Augen zu viel  :-[

DANKE dir Stephan.