Moin,
ich habe mir ein Script gebastelt, dass mir in einer GUI die aktuellen Krypto-Kurse, meine Rendite und ein paar andere Daten anzeigt.
Ist nice to have, sodass ich immer einigermaßen auf dem Laufenden bin.
Dafür zapfe ich die Kurse von der freien Coinbase API an. Da diese aber unterschiedlich zu denen von meiner Kryptobörse BSDEX sind ist das immer nur ein ungefähr Ergebnis.
Jetzt versuche ich schon seit einiger Zeit irgendwie an die Kryptokurse der BSDEX Börse zu kommen, bzw. diese von deren Internetseite (https://app.bsdex.de/signin) zu parsen. Leider gibt es von dieser Börse noch keine API (bzw. nur für Geschäftskunden), die die Kurse bereit stellt.
Wenn ich den Quelltext der Seite öffne sind die Daten dort nicht vorhanden. Wenn ich die Seite mit den Entwicklertools des Browsers öffne, komme ich über den Punkt "Elemente" an den Kurs, aber habe keinen Plan wie die Adresse dieser Seite dann ist. Alle im Quelltext versteckten Links deuten nicht auf eine Seite, die mir die Entwicklertools anscheinend öffnet ...
Aber selbst wenn ich daran käme, bin ich als Parsing Noob zwar gerne bereit, solange daran rumzufummeln, bis ich den Kurs dann herausfiltern kann, hätte aber auch noch das Problem. dass die Werte dort mit Tausender-Punkt dargestellt werden, den ich für mein Script aber nicht gebrauchen kann, da der Punkt bei mir die Trennung der Dezimalstellen anstatt eines Kommas darstellt. Das heißt, den erhaltenen Wert werde ich dann wohl auch noch mit RegExReplace bearbeiten müssen, um den Tausender-Punkt herauszufiltern und ihn anstatt des Kommas weiter hinten zu verwenden.
Kann mir jemand irgendwie nen Tipp geben, wie ich
a) an den Wert (z.B. Bitcoin) herankomme?
b) Ob es eine Möglichkeit gibt, den Wert gleich als ganze Zahl ohne Tausenderpunkt aber mit Punkt anstatt eines Kommas herauszufiltern?
Wie gesagt, ich bin gerne bereit mir die einzelnen Schritte selbst zusammen zu fummeln und mit try und error solange zu basteln, bis ich es hinbekommen habe (zumal ich auch gerade mal ein paar Tage Urlaub und Zeit dafür habe), aber ich bräuchte zumindest mal ne Starthilfe.
So das ich dann danach weiß wie ich vorgehen muss um mir auch die anderen Kryptokurse heraus zu filtern.
Btw. würde man das parsen der verschiedenen Kurse dann in einem Rutsch machen (also alle Kurse erstmal heraus parsen und weiter bearbeiten) oder muss man das einzeln Kurs für Kurs machen?
Ok, ihr merkt schon, ich bin ziemlich planlos was das Thema parsing und weiter verarbeiten betrifft ...
Habe ich bisher auch noch nie selbst gemacht. Wenn, dann nur aus Scripten hier im Forum zusammen geklaut, aber wirklich verstanden eher nicht
Wer ist so nett und erbarmt sich und greift mir mal unter die Arme?
Danke schon mal im voraus!
Gruß aus Hamburch
Kryptokurse von der BSDEX Internetseite parsen Topic is solved
Moderator: jNizM
-
- Posts: 66
- Joined: 18 Feb 2017, 08:39
- Location: Hamburg / Germany
Kryptokurse von der BSDEX Internetseite parsen
Merry Crisis and a happy new fear
Re: Kryptokurse von der BSDEX Internetseite parsen Topic is solved
Hier, mir war langweilig
Code: Select all
#NoEnv
#SingleInstance,Force
url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
Doc := DocumentFromHTML(URLDownloadToVar(url))
CoinsListe := ""
Loop, % Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2").length
{
CoinName := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")[A_index -1].innerText
CoinWert := RTrim(Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")[A_index -1].innerText, " €")
CoinsListe .= CoinName ":" CoinWert "`r`n"
}
MsgBox, % RTrim(CoinsListe, "`r`n")
URLDownloadToVar(url){
hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
hObject.Open("GET",url)
hObject.Send()
return hObject.ResponseText
}
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
-
- Posts: 66
- Joined: 18 Feb 2017, 08:39
- Location: Hamburg / Germany
Re: Kryptokurse von der BSDEX Internetseite parsen
Alter ...... Nicht dein ernst ?!
Wie geil ist das denn?
Klappt bestens und genau wie ich es mir vorgestellt habe, echt der Hammer ...!
Vielen Dank, ich wünschte mir wäre auch mal langweilig und haue dann mal eben sowas raus
Bleibt ja nur noch ein Problem ... jetzt muss ich mir schnell was überlegen, was ich mit den Tagen Urlaub schönes mache
Bester Mann!
Halt, doch noch eine Frage:
Wie bekomme ich in dem Loop die Werte der CoinsListe als einzelne Variablen?
Also als:
CoinName1:CoinWert
CoinName2:CoinWert
CoinName3:CoinWert
usw.
Wie geil ist das denn?
Klappt bestens und genau wie ich es mir vorgestellt habe, echt der Hammer ...!
Vielen Dank, ich wünschte mir wäre auch mal langweilig und haue dann mal eben sowas raus
Bleibt ja nur noch ein Problem ... jetzt muss ich mir schnell was überlegen, was ich mit den Tagen Urlaub schönes mache
Bester Mann!
Halt, doch noch eine Frage:
Wie bekomme ich in dem Loop die Werte der CoinsListe als einzelne Variablen?
Also als:
CoinName1:CoinWert
CoinName2:CoinWert
CoinName3:CoinWert
usw.
Merry Crisis and a happy new fear
-
- Posts: 66
- Joined: 18 Feb 2017, 08:39
- Location: Hamburg / Germany
Re: Kryptokurse von der BSDEX Internetseite parsen
Ok, habe es mit StringSplit selber hinbekommen es in einzelne Variablen aufzuteilen, war ja nicht so schwer.
Werde es die Tage noch auf StrSplit() umstellen, da muss ich mich dann nochmal einlesen wie man das macht.
Nochmal vielen Dank für die Hilfe, nun ist es perfekt!
Werde es die Tage noch auf StrSplit() umstellen, da muss ich mich dann nochmal einlesen wie man das macht.
Nochmal vielen Dank für die Hilfe, nun ist es perfekt!
Merry Crisis and a happy new fear
Re: Kryptokurse von der BSDEX Internetseite parsen
Hallo,
ich lerne nur etwas mit dem Code und bekomme es nicht hin die Spalte Änderung 24h korrekt darzustellen.
Bei mir werden die Werte einer Zeile jeweils zweimal angezeigt. Was mache ich falsch?
Danke fürs lesen
ich lerne nur etwas mit dem Code und bekomme es nicht hin die Spalte Änderung 24h korrekt darzustellen.
Bei mir werden die Werte einer Zeile jeweils zweimal angezeigt. Was mache ich falsch?
Danke fürs lesen
Code: Select all
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
Doc := DocumentFromHTML(URLDownloadToVar(url))
Gui, Add, Listview, w400 r10 Grid vLV, Name|Preis €|Änderung 24h `%| |
Gui, Show,y100, test
CoinsListe := ""
Loop, % Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2").length
{
CoinName := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")[A_index -1].innerText
CoinWert := RTrim(Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")[A_index -1].innerText, " €")
; CoinWert := Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")[A_index -1].innerText
CoinDif := RTrim(Doc.getElementsByClassName("styled__Change-sc-h922kl-1")[A_index -1].innerText, " %")
CoinDi2 := RTrim(Doc.getElementsByClassName("styled__Change-sc-dgnucy-9")[A_index -1].innerText, " %")
CoinsListe .= CoinName " `t " CoinWert " `t " CoinDif " `t " CoinDi2 "`r`n"
LV_Add("", CoinName, CoinWert, CoinDif, CoinDi2)
}
loop 4
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
URLDownloadToVar(url){
hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
hObject.Open("GET",url)
hObject.Send()
return hObject.ResponseText
}
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
Re: Kryptokurse von der BSDEX Internetseite parsen
Moin @effel,
Du machst nichts falsch. Das HTML enthält tatsächlich zwei Einträge mit den Klassen "styled__Change-sc-h922kl-1" und "styled__Change-sc-dgnucy-9". Mit
greifst Du bei der zweiten Tabellenzeile auf den zweiten Wert der ersten Zeile zu, usw.
Du machst nichts falsch. Das HTML enthält tatsächlich zwei Einträge mit den Klassen "styled__Change-sc-h922kl-1" und "styled__Change-sc-dgnucy-9". Mit
Code: Select all
CoinDif := RTrim(Doc.getElementsByClassName("styled__Change-sc-h922kl-1")[A_index -1].innerText, " %")
Code: Select all
<tr id="market-btc-eur" class="styled__TableRow-sc-dgnucy-6 bQKSEB">
<td class="styled__TableCell-sc-dgnucy-0 fLrVPI">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">1
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 bWIGFC">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__AssetCell-sc-1posrgm-0 bdvZwl">
<span color="btc" class="styled__IconWrapper-sc-1v04rhg-0 dIZWAZ">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path d="..."
</path>
</svg>
</span>
<div class="styled__AssetNameWrapper-sc-1posrgm-3 jEBacz">
<div class="styled__AssetName-sc-1posrgm-2 gTsZoj">Bitcoin
</div>
<div class="styled__AssetShort-sc-1posrgm-1 hnuLZP">btc
</div>
</div>
</div>
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 bWIGFC">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__PriceChange-sc-dgnucy-8 eZlpNb">
<div class="styled__Price-sc-dgnucy-7 hrukSM">27.747,94 €
</div>
<div class="styled__Change-sc-h922kl-1 styled__Change-sc-dgnucy-9 hTJKOp hMglHS">-0,39
<!-- --> %
</div>
</div>
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 kqchsP">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__Change-sc-h922kl-1 styled__Change-sc-dgnucy-9 hTJKOp cdEbIY">-0,39
<!-- --> %
</div>
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 fLrVPI">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__ChartWrapper-sc-dgnucy-11 enZLTz">
<svg viewBox="0 0 80 24" preserveAspectRatio="none">
<g>
<path d="..."
</path>
<path d="..."
</path>
</g>
</svg>
</div>
</div></td>
</tr>
Re: Kryptokurse von der BSDEX Internetseite parsen
Hallo Just Me,
sorry das habe ich falsch gefragt, ich meinte es so, dass die Werte sich in der nächsten Zeile jeweils einmal wiederholen
Wie kommst du an diese Daten?
Mit STRG+U komme ich in meinem Browser zwar auch an diesen Datensatz, aber es ist nicht so übersichtlich formatiert.
sorry das habe ich falsch gefragt, ich meinte es so, dass die Werte sich in der nächsten Zeile jeweils einmal wiederholen
Code: Select all
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
Doc := DocumentFromHTML(URLDownloadToVar(url))
Gui, Add, Listview, r10 Grid vLV, Name | Preis € | Änderung 24h `%
Gui, Show,y100, test
CoinsListe := ""
Loop, % Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2").length
{
CoinName := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")[A_index -1].innerText
CoinWert := RTrim(Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")[A_index -1].innerText, " €")
CoinDif := RTrim(Doc.getElementsByClassName("styled__Change-sc-h922kl-1")[A_index -1].innerText, " %")
CoinsListe .= CoinName " `t " CoinWert " `t " CoinDif "`r`n"
LV_Add("", CoinName, CoinWert, CoinDif)
}
loop 3
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
URLDownloadToVar(url){
hObject:=ComObjCreate("WinHttp.WinHttpRequest.5.1")
hObject.Open("GET",url)
hObject.Send()
return hObject.ResponseText
}
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
Wie kommst du an diese Daten?
Code: Select all
<tr id="market-btc-eur" class="styled__TableRow-sc-dgnucy-6 bQKSEB">
<td class="styled__TableCell-sc-dgnucy-0 fLrVPI">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">1
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 bWIGFC">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__AssetCell-sc-1posrgm-0 bdvZwl">
<span color="btc" class="styled__IconWrapper-sc-1v04rhg-0 dIZWAZ">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path d="..."
</path>
</svg>
</span>
<div class="styled__AssetNameWrapper-sc-1posrgm-3 jEBacz">
<div class="styled__AssetName-sc-1posrgm-2 gTsZoj">Bitcoin
</div>
<div class="styled__AssetShort-sc-1posrgm-1 hnuLZP">btc
</div>
</div>
</div>
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 bWIGFC">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__PriceChange-sc-dgnucy-8 eZlpNb">
<div class="styled__Price-sc-dgnucy-7 hrukSM">27.747,94 €
</div>
<div class="styled__Change-sc-h922kl-1 styled__Change-sc-dgnucy-9 hTJKOp hMglHS">-0,39
<!-- --> %
</div>
</div>
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 kqchsP">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__Change-sc-h922kl-1 styled__Change-sc-dgnucy-9 hTJKOp cdEbIY">-0,39
<!-- --> %
</div>
</div></td>
<td class="styled__TableCell-sc-dgnucy-0 fLrVPI">
<div class="styled__InnerCell-sc-dgnucy-14 jWDwZO">
<div class="styled__ChartWrapper-sc-dgnucy-11 enZLTz">
<svg viewBox="0 0 80 24" preserveAspectRatio="none">
<g>
<path d="..."
</path>
<path d="..."
</path>
</g>
</svg>
</div>
</div></td>
</tr>
Mit STRG+U komme ich in meinem Browser zwar auch an diesen Datensatz, aber es ist nicht so übersichtlich formatiert.
Re: Kryptokurse von der BSDEX Internetseite parsen
Moin @effel,
wir haben uns schon richtig verstanden. Das Problem besteht darin, dass es für jede Währung jeweils einen Eintrag mit Klasse "styled__AssetName-sc-1posrgm-2" bzw. "styled__Price-sc-dgnucy-7" aber zwei Einträge mit Klasse "styled__Change-sc-h922kl-1" gibt. Du sprichst die Einträge mit z.B. über ihren Index im Dokument an.
Für den ersten Eintrag (BitCoin) haben das Namensfeld und das Wertfeld den Index 0. Dir zwei Differenzfelder besetzten aber die Indizes 0 und 1.
Beim zweiten Eintrag haben Namensfeld und Wertfeld den Index 1, die Differenzfelder aber die Indizes 2 und 3.
Die Struktur der Währungseinträge sieht damit so aus:
Wenn Du nun alle Einträge über den Index 1 separieren willst, bekommst Du Namen und Wert für die zweite Währung, für die Differenz wird aber der zweite Eintrag der ersten Währung angesprochen. Damit wird der Wert wiederholt.
Diese Art der Auswahl ist ohnehin nicht glücklich. Mit Doc.getElementsByClassName() wird jedesmal das komplette Dokument nach übereinstimmenden Klassen durchsucht, eine komplette Liste zurückgegeben von der nun über den Index genau ein Eintrag übernommen wird. Es ist besser, die Listen nur einmal zu erstellen und dann direkt über den Index auszuwählen:
Den leserlichen HTML-Code habe ich erzeugt, indem ich den runtergeladenen Inhalt in ein Gui Edit ausgegeben und von dort in meinen Lieblingseditor PSPad kopiert habe. Der hat eine Option zum Formatieren von HTML.
wir haben uns schon richtig verstanden. Das Problem besteht darin, dass es für jede Währung jeweils einen Eintrag mit Klasse "styled__AssetName-sc-1posrgm-2" bzw. "styled__Price-sc-dgnucy-7" aber zwei Einträge mit Klasse "styled__Change-sc-h922kl-1" gibt. Du sprichst die Einträge mit z.B.
Code: Select all
Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")[A_index -1]
Für den ersten Eintrag (BitCoin) haben das Namensfeld und das Wertfeld den Index 0. Dir zwei Differenzfelder besetzten aber die Indizes 0 und 1.
Beim zweiten Eintrag haben Namensfeld und Wertfeld den Index 1, die Differenzfelder aber die Indizes 2 und 3.
Die Struktur der Währungseinträge sieht damit so aus:
Code: Select all
Name Wert Diff Diff
0 0 0 1
1 1 2 3
2 2 4 5
...
Diese Art der Auswahl ist ohnehin nicht glücklich. Mit Doc.getElementsByClassName() wird jedesmal das komplette Dokument nach übereinstimmenden Klassen durchsucht, eine komplette Liste zurückgegeben von der nun über den Index genau ein Eintrag übernommen wird. Es ist besser, die Listen nur einmal zu erstellen und dann direkt über den Index auszuwählen:
Code: Select all
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
Url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
Doc := DocumentFromHTML(UrlDownloadToVar(Url))
Namen := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")
Werte := Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")
Dif24 := Doc.getElementsByClassName("styled__Change-sc-h922kl-1")
Anz := Namen.length
Rows := Min(20, Anz)
Gui, Add, Listview, w400 r%Rows% Grid vLV, Name|Preis €|Änderung 24h `%
CoinsListe := ""
I1 := I2 := 0
While (I1 < Anz) {
CoinName := Namen[I1].innerText
CoinWert := RTrim(Werte[I1].innerText, " €")
CoinDiff := RTrim(Dif24[I2].innerText, " %")
CoinsListe .= CoinName " `t " CoinWert " `t " CoinDiff "`r`n"
LV_Add("", CoinName, CoinWert, CoinDiff)
I1 += 1
I2 += 2
}
Loop 3
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
Gui, Show, y100, Kryptokurse BSDEX
Namen := ""
Werte := ""
Dif24 := ""
Doc := ""
Return
GuiClose:
ExitApp
URLDownloadToVar(Url){
Local HTTP
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", Url)
HTTP.Send()
Return HTTP.ResponseText
}
DocumentFromHTML(HTML) {
Local Doc
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
Den leserlichen HTML-Code habe ich erzeugt, indem ich den runtergeladenen Inhalt in ein Gui Edit ausgegeben und von dort in meinen Lieblingseditor PSPad kopiert habe. Der hat eine Option zum Formatieren von HTML.
Re: Kryptokurse von der BSDEX Internetseite parsen
danke, hier habe ich lediglich versucht den 'coinwert' mit dem command 'format' schöner darzustellen ...
Code: Select all
27'814.25
1'705.66
Code: Select all
#Requires AutoHotkey v1.1.33
#Warn
#NoEnv
#SingleInstance,Force
Gui,1: Color,Black
Gui,1: Font, s14 cBlack,Lucida Console
;-
Url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
Doc := DocumentFromHTML(UrlDownloadToVar(Url))
Namen := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")
Werte := Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")
Dif24 := Doc.getElementsByClassName("styled__Change-sc-h922kl-1")
Anz := Namen.length
Rows := Min(20, Anz)
Gui, Add, Listview, w550 r%Rows% BackgroundF0F0F0 Grid vLV, Name|Preis €|Änderung 24h `%
CoinsListe := ""
I1 := I2 := 0
While (I1 < Anz) {
CoinName := Namen[I1].innerText
CoinWert := RTrim(Werte[I1].innerText, " €")
CoinDiff := RTrim(Dif24[I2].innerText, " %")
CoinsListe .= CoinName " `t " CoinWert " `t " CoinDiff "`r`n"
;--
stringreplace,coinwert,coinwert,`.,`',all
stringreplace,coinwert,coinwert,`,,`.,all
;-
t:= strsplit(coinwert,"."), nm := t.1, ct:= t.2
if ct=
ct:="0"
nm:= Format("{:8}",nm)
ct:= Format("{:-5}",ct)
Coinwert := nm . "." . ct
;-
LV_Add("", CoinName, CoinWert, CoinDiff)
I1 += 1
I2 += 2
}
Loop 3
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
Gui, Show, y100 w600, Kryptokurse BSDEX
Namen := "",Werte := "",Dif24 := "",Doc := ""
Return
;------------------------------
GuiClose:
ExitApp
;------------------------------
URLDownloadToVar(Url){
Local HTTP
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", Url)
HTTP.Send()
Return HTTP.ResponseText
}
DocumentFromHTML(HTML) {
Local Doc
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
;==============================
Last edited by garry on 29 Jun 2023, 07:20, edited 1 time in total.
Re: Kryptokurse von der BSDEX Internetseite parsen
Guten Morgen Just Me,
sehr Cool, dieses Thema habe ich nie auch nur ansatzweise verstanden, aber mit der Erklärung zu dem Unterschied wie jeweils die Daten geholt werden, fühle ich fast wie der Groschen fällt.
Hallo @garry, danke dir. Gute Idee habe ich mit reingebastelt. Meintest du das etwa so? Ich kann nicht alles verstehen was du da formatierst
Habe zwar keine Coins aber das Thema juckt, darum habe ich noch etwas weiter gemacht
Grüße aus Köln
sehr Cool, dieses Thema habe ich nie auch nur ansatzweise verstanden, aber mit der Erklärung zu dem Unterschied wie jeweils die Daten geholt werden, fühle ich fast wie der Groschen fällt.
Warum erst in ein Gui Edit?indem ich den runtergeladenen Inhalt in ein Gui Edit ausgegeben
Hallo @garry, danke dir. Gute Idee habe ich mit reingebastelt. Meintest du das etwa so? Ich kann nicht alles verstehen was du da formatierst
Habe zwar keine Coins aber das Thema juckt, darum habe ich noch etwas weiter gemacht
Grüße aus Köln
Code: Select all
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
thisStart := true
Url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
;Gui, STATISTIK: Add, Listview, r20 w700 Grid vSTATS, TimeStamp|Bitcoin|Ethereum|Litecoin|XRP|Bitcoin Cash|Uniswap|Chainlink|Cardano|Polkadot|Solana
Gui, STATISTIK: Add, Listview, r20 w700 Grid vSTATS, | | | | | | | | | | |
Gui, STATISTIK: Show, y100, Kryptokurse BSDEX TimeLine
thisStart:
Doc := DocumentFromHTML(UrlDownloadToVar(Url))
Namen := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")
Werte := Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")
Dif24 := Doc.getElementsByClassName("styled__Change-sc-h922kl-1")
Anz := Namen.length
AnzDif24 := Dif24.length
Rows := Min(AnzDif24, Anz)
;msgbox % Rows "`t" AnzDif24
if thisStart {
Gui, MAIN: Add, Listview, r%Rows% Grid vLV, Name|Preis €|Änderung 24h `%
Gui, MAIN: Show, y100, Kryptokurse BSDEX
thisStart := false
}
Gui, MAIN: Default
Gui, MAIN: Listview, LV
LV_Delete()
CoinsListe := ""
STATISTIK := ""
spaltenTitel := ""
I1 := I2 := 0
While (I1 < Anz) {
CoinName := Namen[I1].innerText
CoinWert := RTrim(Werte[I1].innerText, " €")
CoinDiff := RTrim(Dif24[I2].innerText, " %")
stringreplace,CoinWert,CoinWert,`.,`',all
stringreplace,CoinWert,CoinWert,`,,`.,all
stringreplace,CoinDiff,CoinDiff,`,,`.,all
CoinsListe .= CoinName " `t " CoinWert " `t " CoinDiff "`r`n"
STATISTIK .= CoinWert "`t"
spaltenTitel .= CoinName "`t"
LV_Add("", CoinName, CoinWert, CoinDiff)
I1 += 1
I2 += 2
}
Loop 3
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
Gui, STATISTIK: Default
Gui, STATISTIK: Listview, STATS
spaltenTitel := strSplit(spaltenTitel,"`t")
LV_ModifyCol(1,,"TimeStamp")
for i, sp in spaltenTitel
LV_ModifyCol(a_index+1,,spaltenTitel[a_index])
;STATISTIK
if !(lastStat=STATISTIK)
{
thisStat := STATISTIK
statsSplit := strSplit(STATISTIK,"`t")
anow := A_DD "." A_MM "." A_YYYY a_space a_space A_Hour ":" A_Min ":" A_Sec ; ":" A_MSec
LV_Modify(LV_Add("", anow, statsSplit*), "Vis")
Loop % statsSplit.length()+1
LV_ModifyCol(A_Index, "AutoHdr")
lastStat := thisStat
}
Namen := ""
Werte := ""
Dif24 := ""
Doc := ""
debugRes := ""
MainCounter++
toolTip % MainCounter
random, rand,% (.1*1000*60),% (.3*1000*60) ; 6 bis 18 sekunden
sleep,% rand
goto thisStart
Return
GuiClose:
ExitApp
URLDownloadToVar(Url){
Local HTTP
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", Url)
HTTP.Send()
Return HTTP.ResponseText
}
DocumentFromHTML(HTML) {
Local Doc
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
Last edited by effel on 29 Jun 2023, 00:25, edited 2 times in total.
Re: Kryptokurse von der BSDEX Internetseite parsen
Moin @effel,
Jetzt kann man sich das HTML einfach kopieren und wo auch immer einfügen, um es zu Formatieren.
Weil ich nach Möglichkeit vermeiden will, die Daten unnütz in Dateien auszugeben. Ein GUI ist mit ein paar Zeilen erzeugt:effel wrote:Warum erst in ein Gui Edit?
Code: Select all
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
Url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
HTML := UrlDownloadToVar(Url)
Gui, Add, Edit, vED w1000 r25
GuiControl, , ED, %HTML% ; für den Fall, dass der Text lang ist
Gui, Show, , HTML
Return
GuiClose:
ExitApp
URLDownloadToVar(Url){
Local HTTP
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", Url)
HTTP.Send()
Return HTTP.ResponseText
}
Re: Kryptokurse von der BSDEX Internetseite parsen
Hallo,
ich habe noch ein wenig weiter daran gearbeitet.
In der aktuellen Version werden die abgerufenen Daten gespeichert.
Im Spoiler liegt die History Datei BSDEX.csv vom 1.juli bis 8.juli
Hat jemand eine Idee aus diesen Daten mehr zu machen? Z.B die Erkenntnis das Dienstags zwischen x & y Uhr bestimmte Coins mehr getradet werden?
geändert wegen "Trau keiner Statistik, die Du nicht selbst verfälscht hast!"
ich habe noch ein wenig weiter daran gearbeitet.
In der aktuellen Version werden die abgerufenen Daten gespeichert.
Im Spoiler liegt die History Datei BSDEX.csv vom 1.juli bis 8.juli
Hat jemand eine Idee aus diesen Daten mehr zu machen? Z.B die Erkenntnis das Dienstags zwischen x & y Uhr bestimmte Coins mehr getradet werden?
Code: Select all
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
SetBatchLines, -1
thisStart := true
ShowToday := true ; nur aktuellen tag im listview anzeigen
Url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
;Gui, STATISTIK: Add, Listview, r20 w750 Grid vSTATS, TimeStamp|Bitcoin|Ethereum|Litecoin|XRP|Bitcoin Cash|Uniswap|Chainlink|Cardano|Polkadot|Solana
Gui, STATISTIK: Add, Listview, r20 w730 Grid vSTATS, A|B|C|D|E|F|G|H|I|J|K|L||||
Gui, STATISTIK: Show,, Kryptokurse BSDEX TimeLine
; Gui, STATISTIK: Show, x100 y1, Kryptokurse BSDEX TimeLine
; Gui, STATISTIK: Show, hide
thisStart:
try Doc := DocumentFromHTML(UrlDownloadToVar(Url))
Namen := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")
Werte := Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")
Dif24 := Doc.getElementsByClassName("styled__Change-sc-h922kl-1")
Anz := Namen.length
AnzDif24 := Dif24.length
Rows := Min(AnzDif24, Anz)
;msgbox % Rows "`t" AnzDif24
if thisStart {
Gui, MAIN: Add, Listview, r%Rows% Grid vLV, Name|Preis €|Änderung 24h `%
Gui, MAIN: Show, y100, Kryptokurse BSDEX
; Gui, MAIN: Show, hide
thisStart := false
thisStart#2 := true
}
Gui, MAIN: Default
Gui, MAIN: Listview, LV
LV_Delete()
CoinsListe := ""
STATISTIK := ""
spaltenTitel := ""
I1 := I2 := 0
While (I1 < Anz) {
CoinName := Namen[I1].innerText
CoinWert := RTrim(Werte[I1].innerText, " €")
CoinDiff := RTrim(Dif24[I2].innerText, " %")
stringreplace,CoinWert,CoinWert,`.,`',all
stringreplace,CoinWert,CoinWert,`,,`.,all
stringreplace,CoinDiff,CoinDiff,`,,`.,all
CoinsListe .= CoinName " `t " CoinWert " `t " CoinDiff "`r`n"
STATISTIK .= CoinWert "`t"
spaltenTitel .= CoinName "`t"
LV_Add("", CoinName, CoinWert, CoinDiff)
I1 += 1
I2 += 2
}
Loop 3
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
Gui, STATISTIK: Default
Gui, STATISTIK: Listview, STATS
spaltenTitel := strSplit(spaltenTitel,"`t")
LV_ModifyCol(1,,"TimeStamp")
for i, sp in spaltenTitel
LV_ModifyCol(a_index+1,,spaltenTitel[a_index])
if thisStart#2 { ; listView History laden
SplashTextOn,,,Load...
fileRead, thisReload,% a_scriptdir "\BSDEX.csv"
ReloadARR := strSplit(thisReload,"`n")
GuiControl, -ReDraw, STATS
for i, this in ReloadARR {
thisSplit := strSplit(this,"`t")
if thisSplit.4
{
toDay := strSplit(thisSplit.1,[".", a_space])
; msgBox % toDay.1 "`n" toDay.2 "`n" toDay.3
if ShowToday
{
if (A_DD=toDay.1) && (A_MM=toDay.2) && (A_YYYY=toDay.3)
LV_Modify(LV_Add("", thisSplit*), "Vis")
}else
LV_Modify(LV_Add("", thisSplit*), "Vis")
}else
fileAppend, % thisSplit.1 "`n", BSDEX_error.txt
}
Loop % AnzDif24
LV_ModifyCol(A_Index, "AutoHdr")
GuiControl, +ReDraw, STATS
thisStart#2 := false
SplashTextOff
}
;STATISTIK
if !(lastStat=STATISTIK)
{
GuiControl, -ReDraw, STATS
thisStat := STATISTIK
statsSplit := strSplit(STATISTIK,"`t")
anow := A_DD "." A_MM "." A_YYYY a_space a_space A_Hour ":" A_Min ":" A_Sec ; ":" A_MSec
if statsSplit {
lastStat := thisStat
fileRead, BSDEXVar,% a_scriptdir "\BSDEX.csv" ; bei reload überprüfen ob der eintrag schon vorhanden ist
BSDEXarr := strSplit(BSDEXVar,"`n")
a_LastLine := BSDEXarr[BSDEXarr.length()-1] ; letzte zeile
if a_lastline not contains %STATISTIK%
{
fileAppend,% anow "`t" STATISTIK "`n",% a_scriptdir "\BSDEX.csv"
if statsSplit.3
LV_Modify(LV_Add("", anow, statsSplit*), "Vis")
Loop % AnzDif24
LV_ModifyCol(A_Index, "AutoHdr")
thisBSDEX := strSplit(a_LastLine,"`t",,2) ; TimeStamp entfernten
;msgbox,,, % a_LastLine "`n`n" thisBSDEX.2 "`n`n" STATISTIK "`n`n" thisSplit.1 ,10
}}
GuiControl, +ReDraw, STATS
}
Namen := ""
Werte := ""
Dif24 := ""
Doc := ""
debugRes := ""
MainCounter++
; toolTip % MainCounter
random, rand,% (.1*1000*60),% (.3*1000*60) ; 6 bis 18 sekunden
sleep,% rand
goto thisStart
Return
GuiClose:
ExitApp
URLDownloadToVar(Url){
Local HTTP
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", Url)
HTTP.Send()
Return HTTP.ResponseText
}
DocumentFromHTML(HTML) {
Local Doc
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
Spoiler
geändert wegen "Trau keiner Statistik, die Du nicht selbst verfälscht hast!"
Last edited by effel on 08 Jul 2023, 13:50, edited 2 times in total.
Re: Kryptokurse von der BSDEX Internetseite parsen
Moin @effel,
da sieht man wieder mal, warum es heißt: "Trau keiner Statistik, die Du nicht selbst verfälscht hast!".
Schönes Wochenende noch!
da sieht man wieder mal, warum es heißt: "Trau keiner Statistik, die Du nicht selbst verfälscht hast!".
Ich habe mir das nicht angeschaut, denn ich konnte auch so erkennen, dass Du die Daten vom 31.06. frei erfunden hast. Wen willst Du damit auf welche falsche Fährte locken?Im Spoiler liegt die History Datei BSDEX.csv vom 31.juni bis 8.juli
Schönes Wochenende noch!
Re: Kryptokurse von der BSDEX Internetseite parsen
ganz ehrlich just me habe ich nicht, die daten ab dem ersten sammelte mein Rechner in meiner Abwesenheit, am 31ten habe ich noch dauernd das Script aktualisiert, daher stammen die nicht passenden Daten
Indianerehrenwort
Hier habe ich sich wiederholende Zeiten gefunden wo vom Server keine Daten gesendet wurden
Code: Select all
01.07.2023 06:51:34
01.07.2023 10:21:42
01.07.2023 13:50:06
01.07.2023 17:14:58
01.07.2023 20:42:34
02.07.2023 00:09:58
02.07.2023 06:47:22
02.07.2023 10:16:34
02.07.2023 13:46:02
02.07.2023 17:12:38
02.07.2023 20:40:14
03.07.2023 00:11:22
03.07.2023 06:47:26
03.07.2023 10:13:58
03.07.2023 13:44:42
03.07.2023 17:14:10
03.07.2023 20:42:02
04.07.2023 00:10:54
04.07.2023 06:42:58
04.07.2023 10:09:06
04.07.2023 13:35:50
04.07.2023 17:03:22
04.07.2023 20:32:30
05.07.2023 00:01:22
05.07.2023 06:41:26
05.07.2023 10:08:46
05.07.2023 13:36:42
05.07.2023 17:03:38
05.07.2023 20:31:14
06.07.2023 01:51:02
06.07.2023 06:40:34
06.07.2023 10:05:50
06.07.2023 13:32:14
06.07.2023 16:57:14
06.07.2023 20:24:22
06.07.2023 23:54:18
Re: Kryptokurse von der BSDEX Internetseite parsen
Hallo,
falls es jemand interessiert sende ich gerne mal ein Update
...im Moment sieht es danach aus das ich noch ohne fragen weiter komme
... Anregungen und Tipps sind sehr willkommen
falls es jemand interessiert sende ich gerne mal ein Update
...im Moment sieht es danach aus das ich noch ohne fragen weiter komme
... Anregungen und Tipps sind sehr willkommen
Code: Select all
SetTimer,UPDATEDSCRIPT,500
ANow := A_Now
If !FileExist(A_ScriptDir "\save\")
FileCreateDir,% A_ScriptDir "\save\"
FileCopy, % A_ScriptFullPath, % A_ScriptDir "\save\" A_ScriptName " save " A_Now " .ahk"
;setTimer, TimerMAINGui, -3000
;21 Kryptokurse von der BSDEX Internetseite parsen Persönlich Microsoft Edge
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=118808
#NoEnv
#SingleInstance,Force
SetBatchLines, -1
; Große GUI: Maus Click auf "ColClick" erzeugt GUI
; Maus Click auf ListView offnet MsgBox
; Rechte Maus Taste auf ListView exportiert ListView in CSV Datei
; Option ExportierenMitPunktOderKomma
ListViewWidth := 900
spaltenTitelEXPORTIEREN := 0 ; RMouse auf "TimeLine Gui" exportiert ListView in name.csv
ExportierenMitPunktOderKomma := 0 ; true = punkt -
; Excel benötigt zum rechnen das Komma, AHK rechnet mit Punkt
ShowGuiSTATISTIK := 1 ; true = Gui Show
ShowGuiMAIN := 1 ; true = Gui Show
ShowToday := 0 ; nur aktuellen tag im listview anzeigen
ShowYesterday := 1 ; nur wenn [ShowToday] = true, aktuellen und gestrigen tag im listview anzeigen
global showBreite := 0 ; spaltenTitel in der GUI jeweils durch spaltenbreite ersetzen für Test
thisStart := true
Gui, STATISTIK: Add, Listview, r20 w%ListViewWidth% Grid vSTATS ggLabelSTATISTIKListView AltSubmit NoSort, A|B|C|D|E|F|G|H|I|J|K|L
; Gui, STATISTIK: Show,, Kryptokurse BSDEX TimeLine
Gui, STATISTIK: Show, x100 y1, Kryptokurse BSDEX TimeLine
if !ShowGuiSTATISTIK
Gui, STATISTIK: Show, hide
thisStart:
Url := "https://widgets.bsdex.de/de/markets/?hide_cta=1&range=24H" ;Versteckte Url
; Url := "https://app.bsdex.de/signin"
Doc := ""
try Doc := DocumentFromHTML(UrlDownloadToVar(Url))
if !isObject(Doc)
{
random, rand,% (.1*1000*60),% (.3*1000*60) ; 6 bis 18 sekunden
sleep,% rand
goto thisStart
}
dok := doc
;msgbox % isObject(Dok)
Namen := Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")
Shorts := Doc.getElementsByClassName("styled__AssetShort-sc-1posrgm-1")
Werte := Doc.getElementsByClassName("styled__Price-sc-dgnucy-7")
Dif24 := Doc.getElementsByClassName("styled__Change-sc-h922kl-1")
Anz := Namen.length
AnzDif24 := Dif24.length
Rows := Min(AnzDif24, Anz)
; msgbox % Rows "`t" AnzDif24 "`nShorts:`t" Shorts.length
test := 0
if test
{
res =
loop % Anz
res .= Shorts[a_index-1].innerText "`n"
StringUpper,res,res
if res
Msgbox,,% "a_lineNumber: `t" a_lineNumber, % res ,4
}
if thisStart { ; wird nur einmal gestartet
Gui, MAIN: Add, Listview, w%ListViewWidth% r%Rows% Grid vLV, Name|Short|Preis €|Änderung 24h `%|MIN( thisCoin )|Datum|MAX( thisCoin )|Datum|Tage
Gui, MAIN: Show, x100 y410, Kryptokurse BSDEX
if !ShowGuiMAIN
Gui, MAIN: Show, hide
thisStart := false
thisStart#2 := true
}
Gui, MAIN: Default
Gui, MAIN: Listview, LV
CoinsListe := ""
STATISTIK := ""
CoinNameALL =
I1 := I2 := 0
While (I1 < Anz) {
CoinName := Namen[I1].innerText
Short := Shorts[I1].innerText
CoinWert := RTrim(Werte[I1].innerText, " €")
CoinDiff := RTrim(Dif24[I2].innerText, " %")
; stringreplace,CoinWert,CoinWert,`.,`',all
stringreplace,CoinWert,CoinWert,`.,,all
stringreplace,CoinWert,CoinWert,`,,`.,all
stringreplace,CoinDiff,CoinDiff,`,,`.,all
StringUpper, Short, Short
; CoinsListe .= CoinName "`t" Short "`t" CoinWert "`t" CoinDiff "`n"
; CoinsListe.= Name "`t" Short "`t" Preis € "`t" Änderung 24h `% "`t" MIN( thisCoin ) "`t" Datum "`t" MAX( thisCoin ) "`t" Datum "`t" Tage "`n"
STATISTIK .= CoinWert "`t"
spaltenTitel .= CoinName "`t"
I1 += 1
I2 += 2
I3 += 3
}
Gui, STATISTIK: Default
Gui, STATISTIK: Listview, STATS
if thisStart#2 { ; wird nur einmal gestartet ; listView History laden
spaltenTitelARR := strSplit(spaltenTitel,"`t")
LV_ModifyCol(1,,"TimeStamp")
for aindex, sp in spaltenTitelARR {
LV_ModifyCol(aindex+1,,spaltenTitelARR[aindex])
x := strReplace(spaltenTitelARR[aindex],a_space,"_")
if x
%x% := []
}
datum := []
mutad := []
/*
#NoEnv
HTML := {0x00FFFF: "AQUA", 0x000000: "BLACK", 0x0000FF: "BLUE", 0xFF00FF: "FUCHSIA", 0x808080: "GRAY", 0x008000: "GREEN"
, 0x00FF00: "LIME", 0x800000: "MAROON", 0x000080: "NAVY", 0x808000: "OLIVE", 0x800080: "PURPLE", 0xFF0000: "RED"
, 0xC0C0C0: "SILVER", 0x008080: "TEAL", 0xFFFFFF: "WHITE", 0xFFFF00: "YELLOW"}
FarbWert := 0xC0C0C0
If HTML.HasKey(FarbWert)
FarbName := HTML[FarbWert]
Else
FarbName := "Ham wa nich!"
MsgBox, 0, RGB %FarbWert%, Name: %FarbName%
*/
SplashTextOn,,,Load...
fileRead, thisReload,% a_scriptdir "\BSDEX.csv"
ReloadARR := strSplit(thisReload,"`n")
GuiControl, -ReDraw, STATS
for i, this in ReloadARR {
thisSplit := strSplit(this,"`t",a_space)
;coin
for aindex, thisValue in thisSplit {
if thisValue {
thisCoin := strReplace(spaltenTitelARR[aindex],a_space,"_")
thisValue := thisSplit[aindex+1]
stringreplace,thisValue,thisValue,`',,all
stringreplace,thisValue,thisValue,`,,`.,all
%thisCoin%.push(thisValue)
; Datum[%thisCoin%].push(thisSplit.1)
; Datum[thisSplit.5] := thisSplit.1
Datum[thisValue] := thisSplit.1
mutad[thisSplit.1] := thisValue
; Datum[thisSplit.5] := thisCoin "`t" thisSplit.1
; Datum[thisSplit.1] := %thisCoin%[thisSplit.1]
; Datum[thisCoin,thisValue,thisSplit.1] := %thisCoin%[thisSplit.2]
; DatumB[thisCoin] := thisSplit.1
; das hier macht noch nicht viel sinn :)
; (x := Datum.bitcoin.hashkey("01.07.2023 00:01:59"))
;msgbox % datum.length()
}}
if thisSplit.4
{
toDay := strSplit(thisSplit.1,[".", a_space])
; msgBox % toDay.1 "`n" toDay.2 "`n" toDay.3
if ShowToday
{
if ShowYesterday
ADD := A_DD
if ((LTRIM(ADD,"0")-1=LTRIM(toDay.1,"0")) ; gestern
|| (A_DD=toDay.1)) ; heute
&& (A_MM=toDay.2)
&& (A_YYYY=toDay.3)
LV_Modify(LV_Add("", thisSplit*), "Vis")
}else{
LV_Modify(LV_Add("", thisSplit*), "Vis")
}
}else
fileAppend, % thisSplit.1 "`n", BSDEX_error.txt
}
Loop % AnzDif24
LV_ModifyCol(A_Index, "AutoHdr")
GuiControl, +ReDraw, STATS
thisStart#2 := false
SplashTextOff
}
;STATISTIK
if !(lastStat=STATISTIK)
{
GuiControl, -ReDraw, STATS
thisStat := STATISTIK
statsSplit := strSplit(STATISTIK,"`t")
anow := A_DD "." A_MM "." A_YYYY a_space a_space A_Hour ":" A_Min ":" A_Sec ; ":" A_MSec
if statsSplit {
lastStat := thisStat
fileRead, BSDEXVar,% a_scriptdir "\BSDEX.csv" ; bei reload überprüfen ob der eintrag schon vorhanden ist
BSDEXarr := strSplit(BSDEXVar,"`n")
a_LastLine := BSDEXarr[BSDEXarr.length()-1] ; letzte zeile
if a_lastline not contains %STATISTIK%
{
fileAppend,% anow "`t" STATISTIK "`n",% a_scriptdir "\BSDEX.csv"
if statsSplit.3
{
LV_Modify(LV_Add("", anow, statsSplit*), "Vis")
;coin
for aindex, thisValue in statsSplit {
if thisValue {
thisCoin := strReplace(spaltenTitelARR[aindex],a_space,"_")
thisValue := statsSplit[aindex]
stringreplace,thisValue,thisValue,`',,all
stringreplace,thisValue,thisValue,`,,`.,all
%thisCoin%.push(thisValue)
}}}
Loop % AnzDif24
LV_ModifyCol(A_Index, "AutoHdr")
thisBSDEX := strSplit(a_LastLine,"`t",,2) ; TimeStamp entfernten
;msgbox,,, % a_LastLine "`n`n" thisBSDEX.2 "`n`n" STATISTIK "`n`n" thisSplit.1 ,10
}}
columnsWidthsPlusX(2)
GuiControl, +ReDraw, STATS
thisTimerMAINGui := true
}
Namen := ""
Werte := ""
Dif24 := ""
Doc := ""
debugRes := ""
MainCounter++
; toolTip % MainCounter
;msgbox,,% a_linenumber, % bitcoin[1]
if thisTimerMAINGui
{
setTimer, TimerMAINGui, -1
thisTimerMAINGui := 0
}
random, rand,% (.1*1000*60),% (.3*1000*60) ; 6 bis 18 sekunden
sleep,% rand
goto thisStart
Return
GuiClose:
return
ExitApp
;########################################################################################################################################################################
;########################################################################################################################################################################
TimerMAINGui:
doc := dok
; dok := doc
Namen := doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")
Shorts := doc.getElementsByClassName("styled__AssetShort-sc-1posrgm-1")
Werte := doc.getElementsByClassName("styled__Price-sc-dgnucy-7")
Dif24 := doc.getElementsByClassName("styled__Change-sc-h922kl-1")
Anz := Namen.length
AnzDif24 := Dif24.length
Rows := Min(AnzDif24, Anz)+1
; msgbox % Rows "`t" AnzDif24 "`nShorts:`t" Shorts.length
CoinNameALL =
Gui, MAIN: Default
Gui, MAIN: Listview, LV
LVAdd := ""
; CoinsListe:= ""
STATISTIK := ""
CoinNameALL =
; spaltenTitel := ""
I1 := I2 := 0
While (I1 < Anz) {
CoinName := Namen[I1].innerText
Short := Shorts[I1].innerText
CoinWert := RTrim(Werte[I1].innerText, " €")
CoinDiff := RTrim(Dif24[I2].innerText, " %")
stringreplace,CoinWert,CoinWert,`.,`',all
stringreplace,CoinWert,CoinWert,`,,`.,all
stringreplace,CoinDiff,CoinDiff,`,,`.,all
StringUpper, Short, Short
; CoinsListe.= CoinName "`t" Short "`t" CoinWert "`t" CoinDiff "`r`n"
STATISTIK .= CoinWert "`t"
spaltenTitel .= CoinName "`t"
;msgbox % datum.maxindex()
thisCoin := StrReplace(CoinName,a_space,"_")
;if !inStr(CoinNameALL,CoinName "|")
;date := (round(max(%thisCoin%*),3))
; (x := Datum.hashkey("27949,44"))
;Datum[thisValue] := thisSplit.1
;mutad[thisSplit.1] := thisValue
If datum.HasKey(CoinWert)
thisDate := datum[CoinWert]
If datum.HasKey(thisDate)
xthisCoinWert := datum[thisDate]
LVAdd .= CoinName "`t" Short "`t" CoinWert "`t" CoinDiff "`t" (round(min(%thisCoin%*),3)) "`t" thisDate "`t" (round(max(%thisCoin%*),3)) "`t" thisDate "`t" xthisCoinWert "`n" ;ROUND((%thisCoin%.length())/10/10) "`n"
; MeinArray.HasKey("Schlüssel")
;CoinNameALL .= CoinName "|"
I1 += 1
I2 += 2
I3 += 3
}
/*
#NoEnv
HTML := {0x00FFFF: "AQUA", 0x000000: "BLACK", 0x0000FF: "BLUE", 0xFF00FF: "FUCHSIA", 0x808080: "GRAY", 0x008000: "GREEN"
, 0x00FF00: "LIME", 0x800000: "MAROON", 0x000080: "NAVY", 0x808000: "OLIVE", 0x800080: "PURPLE", 0xFF0000: "RED"
, 0xC0C0C0: "SILVER", 0x008080: "TEAL", 0xFFFFFF: "WHITE", 0xFFFF00: "YELLOW"}
FarbWert := 0xC0C0C0
If HTML.HasKey(FarbWert)
FarbName := HTML[FarbWert]
Else
FarbName := "Ham wa nich!"
MsgBox, 0, RGB %FarbWert%, Name: %FarbName%
*/
Gui, MAIN: Default
Gui, MAIN: Listview, LV
GuiControl, -ReDraw, LV
LV_Delete()
CoinNameALL =
for i, thisAdd in strSplit(LVADD,"`n") {
LVADDs := strSplit(thisAdd,"`t")
if LVADDs.1
LV_Add("", LVADDs*)
}
STATISTIKOLD := STATISTIK
Loop 4
LV_ModifyCol(A_Index, "AutoHdr")
; MsgBox, % RTrim(CoinsListe, "`r`n")
columnsWidthsPlusX(1)
GuiControl, +ReDraw, LV
random, rand,% (.1*1000*60),% (.5*1000*60) ; 6 bis 18 sekunden
;setTimer, TimerMAINGui,% rand
return
;###################################################################################################################################
; beautify ListView
columnsWidthsPlusX(auswahl) {
Gui +LastFound
if (auswahl=1)
{
Gui, MAIN: Default
Gui, MAIN: Listview, LV
GuiControl, -ReDraw, LV
Loop % LV_GetCount("Column")
LV_ModifyCol(A_Index, "AutoHdr")
Loop % LV_GetCount("Column")
{
SendMessage, 0x101D, A_Index - 1, 0, SysListView321 ; 0x101D ist LVM_GETCOLUMNWIDTH.
thisErrorLevel := ErrorLevel
if (a_index=1) {
SB := (thisErrorLevel + 27)
LV_ModifyCol(a_index,SB)
if showBreite
LV_ModifyCol(a_index,,SB)
}else{
SB := (thisErrorLevel + 10)
LV_ModifyCol(a_index,SB)
if showBreite
LV_ModifyCol(a_index,,SB)
}
; LV_ModifyCol(10,"AutoHdr")
LV_ModifyCol(9,"AutoHdr")
}
GuiControl, +ReDraw, LV
}
if (auswahl=2)
{
Gui, STATISTIK: Default
Gui, STATISTIK: Listview, STATS
GuiControl, -ReDraw, STATS
Loop % LV_GetCount("Column")
{
SendMessage, 0x101D, A_Index - 1, 0, SysListView321 ; 0x101D ist LVM_GETCOLUMNWIDTH.
thisErrorLevel := ErrorLevel
if (a_index=1) {
SB := (thisErrorLevel + 35)
LV_ModifyCol(a_index,SB)
if showBreite
LV_ModifyCol(a_index,,SB)
}else{
SB := (thisErrorLevel + 17)
LV_ModifyCol(a_index,SB)
if showBreite
LV_ModifyCol(a_index,,SB)
}
LV_ModifyCol(11,"AutoHdr")
LV_ModifyCol(12,"AutoHdr")
}
; Loop % LV_GetCount("Column")
; LV_ModifyCol(A_Index, "AutoHdr")
GuiControl, +ReDraw, STATS
}
if (auswahl=3)
{
; Gui, STATISTIK: Default
; Gui, STATISTIK: Listview, STATS
GuiControl, -ReDraw, STATS
Loop % LV_GetCount("Column")
LV_ModifyCol(A_Index, "AutoHdr")
Loop % LV_GetCount("Column")
{
SendMessage, 0x101D, A_Index - 1, 0, SysListView321 ; 0x101D ist LVM_GETCOLUMNWIDTH.
thisErrorLevel := ErrorLevel
if (a_index=1) {
SB := (thisErrorLevel + 30)
LV_ModifyCol(a_index,SB)
if showBreite
LV_ModifyCol(a_index,,SB)
}else{
SB := (thisErrorLevel + 5)
LV_ModifyCol(a_index,SB)
if showBreite
LV_ModifyCol(a_index,,SB)
}
LV_ModifyCol(2,"AutoHdr")
}
GuiControl, +ReDraw, STATS
}
}
gLabelSTATISTIKListView:
Gui, STATISTIK: Default
Gui, STATISTIK: Listview, STATS
; if (A_GuiEvent = "DoubleClick")
; if (A_GuiEvent = "R")
if (A_GuiEvent = "Normal")
; if (A_GuiEvent = "RightClick")
{
LV_GetText(TimeStamp, A_EventInfo, 1) ; Text des ersten Feldes abrufen.
loop, % Anz
LV_GetText(coin%a_index%, A_EventInfo, a_index+1)
clipBoard := "Zeile:`t" A_EventInfo "`n" timeStamp "`n`n"
loop, % Anz
clipBoard .= spaltenTitelARR[a_index] "`t" coin%a_index% "`n"
MsgBox,4096,Kryptokurse BSDEX, % clipBoard,
}
if (A_GuiEvent = "RightClick")
{
gosub EXPORT
}
if (A_GuiEvent = "ColClick")
{
res := ((A_EventInfo=1) ? "" : (A_GuiEvent "`n" (spaltenTitelARR[A_EventInfo-1])))
if (A_EventInfo=1) ; TimeStamp click ignorieren
return
thisCoin := strReplace((spaltenTitelARR[A_EventInfo-1]),a_space,"_")
thisClick := "thisCoin:`t" strReplace(thisCoin,"_",a_space) "`n"
. "MaxINDEX:`t" %thisCoin%[%thisCoin%.MAXIndex()] "`n"
. "MinINDEX:`t" %thisCoin%[%thisCoin%.MINIndex()] "`n"
. "min(" thisCoin "):`t" round(min(%thisCoin%*),3) "`n"
. "max(" thisCoin "):`t" round(max(%thisCoin%*),3) "`n"
. thisCoin ".Length():`t" %thisCoin%.length()
thisGUI := "A" a_tickCount "A"
Gui, %thisGUI%: Add, Listview, r6 vTMPLV%thisGUI% NoSort, Name|Wert
Gui, %thisGUI%: default
Gui, %thisGUI%: +AlwaysOnTop
stringreplace,CoinWert,CoinWert,`.,,all
stringreplace,CoinWert,CoinWert,`,,`.,all
lv_ADD("", "thisCoin", strReplace(thisCoin,"_",a_space))
lv_ADD("", "MaxINDEX", %thisCoin%[%thisCoin%.MAXIndex()])
lv_ADD("", "MinINDEX", %thisCoin%[%thisCoin%.MINIndex()])
;msgbox % thisTMPcoin := "2" %thisCoin%[%thisCoin%.length()]
lv_ADD("", "min(" thisCoin ")", round(min(%thisCoin%*),3))
lv_ADD("", "max(" thisCoin ")", round(max(%thisCoin%*),3))
%thisCoin%length := %thisCoin%.length()
lv_ADD("", thisCoin ".Length()", %thisCoin%length)
Loop % LV_GetCount("Column")
LV_ModifyCol(A_Index, "AutoHdr")
columnsWidthsPlusX(3)
Gui, %thisGUI%: Show,,% "ColClick: " thisCoin
; MsgBox,,, % (spaltenTitelARR[A_EventInfo-1]) "`n" Bitcoin[Bitcoin.MAXIndex()],2
; MsgBox,,, % (A_EventInfo=1) ? "" : (res),1
; MsgBox,,, % Solana.Length(),1
; MsgBox,,, % Solana.MinIndex(),1
; MsgBox,,, % Solana.MAXIndex(),1
; MsgBox,,, % Solana[Solana.MINIndex()]
}
return
;----------------------------------------------------------------------------------------
EXPORT:
anow := A_DD "." A_MM "." A_YYYY "_" A_Hour "-" A_Min "-" A_Sec ; ":" A_MSec
Filename := a_scriptDir "\" anow " BSDEX_EXPORT.csv"
oFile := FileOpen(FileName, "w") ; Creates a new file, overwriting any existing file.
If (!IsObject(oFile)) { ; make sure the file opened and exit if it didn't
Msgbox 0x40000,, % "Can't create "FileName " for writing.!!!"
ExitApp
}
if spaltenTitelEXPORTIEREN
oFile.WriteLine("TimeStamp`t" RTRIM(spaltenTitel,"`t"))
Gui, STATISTIK: Default
Gui, STATISTIK: Listview, STATS
Loop % LV_GetCount() {
LV_GetText(oCol1, A_index, 1)
LV_GetText(oCol2, A_index, 2)
LV_GetText(oCol3, A_index, 3)
LV_GetText(oCol4, A_index, 4)
LV_GetText(oCol5, A_index, 5)
LV_GetText(oCol6, A_index, 6)
LV_GetText(oCol7, A_index, 7)
LV_GetText(oCol8, A_index, 8)
LV_GetText(oCol9, A_index, 9)
LV_GetText(oCol10, A_index, 10)
LV_GetText(oCol11, A_index, 11)
oLine := oCol2 "`t" oCol3 "`t" oCol4 "`t" oCol5 "`t" oCol6 "`t" oCol7 "`t" oCol8 "`t" oCol9 "`t" oCol10 "`t" oCol11 "`t"
stringreplace,oLine,oLine,`',,all
if ExportierenMitPunktOderKomma
stringreplace,oLine,oLine,`,,`.,all
else
stringreplace,oLine,oLine,`.,`,,all
stringreplace,oCol1,oCol1,`,,`.,all
oLine := oCol1 "`t" oLine
DOPPELTESUCHE := oCol2 "`t" oCol3 "`t" oCol4 "`t" oCol5 "`t" oCol6 "`t" oCol7 "`t" oCol8 "`t" oCol9 "`t" oCol10 "`t" oCol11 "`t"
oLine := RTRIM(oLine,"`t")
if !(DOPPELTESUCHEold=DOPPELTESUCHE)
oFile.WriteLine(oLine)
DOPPELTESUCHEold := DOPPELTESUCHE
}
oFile.Close()
oFile:=""
oLine:=""
try run % Filename
;Msgbox 0x40000,, % "File " Filename " exported"
Return
;----------------------------------------------------------------------------------------
URLDownloadToVar(Url){
Local HTTP
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", Url)
HTTP.Send()
Return HTTP.ResponseText
}
DocumentFromHTML(HTML) {
Local Doc
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
UPDATEDSCRIPT:
FileGetAttrib,attribs,%A_ScriptFullPath%
IfInString,attribs,A
{
FileSetAttrib,-A,%A_ScriptFullPath%
SplashTextOn,,,Updated script,
Sleep,1500
Reload
}
;SetTimer,UPDATEDSCRIPT,500
Who is online
Users browsing this forum: No registered users and 18 guests