Kryptokurse von der BSDEX Internetseite parsen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Filzfrosch
Posts: 66
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Kryptokurse von der BSDEX Internetseite parsen

25 Jun 2023, 16:03

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 :D :-D
Wer ist so nett und erbarmt sich und greift mir mal unter die Arme?

Danke schon mal im voraus!
Gruß aus Hamburch
Merry Crisis and a happy new fear
KHA
Posts: 406
Joined: 21 Aug 2018, 11:11

Re: Kryptokurse von der BSDEX Internetseite parsen  Topic is solved

25 Jun 2023, 17:03

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
}
Filzfrosch
Posts: 66
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Re: Kryptokurse von der BSDEX Internetseite parsen

25 Jun 2023, 17:48

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 :D

Bleibt ja nur noch ein Problem ... jetzt muss ich mir schnell was überlegen, was ich mit den Tagen Urlaub schönes mache :D :D
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
Filzfrosch
Posts: 66
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Re: Kryptokurse von der BSDEX Internetseite parsen

26 Jun 2023, 07:15

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!
Merry Crisis and a happy new fear
effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Kryptokurse von der BSDEX Internetseite parsen

26 Jun 2023, 09:52

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


06_26_23 @4_39_37.PNG
06_26_23 @4_39_37.PNG (29.63 KiB) Viewed 1567 times

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
}
just me
Posts: 9528
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Kryptokurse von der BSDEX Internetseite parsen

27 Jun 2023, 05:15

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

Code: Select all

      CoinDif := RTrim(Doc.getElementsByClassName("styled__Change-sc-h922kl-1")[A_index -1].innerText, " %")
greifst Du bei der zweiten Tabellenzeile auf den zweiten Wert der ersten Zeile zu, usw.

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>
effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Kryptokurse von der BSDEX Internetseite parsen

28 Jun 2023, 01:46

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

test.png
test.png (13.39 KiB) Viewed 1498 times

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.
just me
Posts: 9528
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Kryptokurse von der BSDEX Internetseite parsen

28 Jun 2023, 06:00

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.

Code: Select all

Doc.getElementsByClassName("styled__AssetName-sc-1posrgm-2")[A_index -1]
ü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:

Code: Select all

Name  Wert  Diff  Diff
0     0     0     1
1     1     2     3
2     2     4     5
...
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:

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.
garry
Posts: 3787
Joined: 22 Dec 2013, 12:50

Re: Kryptokurse von der BSDEX Internetseite parsen

28 Jun 2023, 11:44

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
}
;==============================
20230629141854_screenshot.jpg
20230629141854_screenshot.jpg (69.18 KiB) Viewed 1402 times
Last edited by garry on 29 Jun 2023, 07:20, edited 1 time in total.
effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Kryptokurse von der BSDEX Internetseite parsen

28 Jun 2023, 23:38

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.
indem ich den runtergeladenen Inhalt in ein Gui Edit ausgegeben
Warum erst in ein Gui Edit?



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

06_29_23 @6_22_04.PNG
06_29_23 @6_22_04.PNG (47.3 KiB) Viewed 1440 times

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.
just me
Posts: 9528
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Kryptokurse von der BSDEX Internetseite parsen

29 Jun 2023, 02:20

Moin @effel,
effel wrote:Warum erst in ein Gui Edit?
Weil ich nach Möglichkeit vermeiden will, die Daten unnütz in Dateien auszugeben. Ein GUI ist mit ein paar Zeilen erzeugt:

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
}
Jetzt kann man sich das HTML einfach kopieren und wo auch immer einfügen, um es zu Formatieren.
effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Kryptokurse von der BSDEX Internetseite parsen

08 Jul 2023, 08:29

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?

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


07_08_23 @3_07_23.PNG
07_08_23 @3_07_23.PNG (67.81 KiB) Viewed 1322 times


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.
just me
Posts: 9528
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Kryptokurse von der BSDEX Internetseite parsen

08 Jul 2023, 10:06

Moin @effel,

da sieht man wieder mal, warum es heißt: "Trau keiner Statistik, die Du nicht selbst verfälscht hast!".
Im Spoiler liegt die History Datei BSDEX.csv vom 31.juni bis 8.juli
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?

Schönes Wochenende noch!
;)
effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Kryptokurse von der BSDEX Internetseite parsen

08 Jul 2023, 13:31

just me wrote:
08 Jul 2023, 10:06
"Trau keiner Statistik, die Du nicht selbst verfälscht hast!
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
effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Kryptokurse von der BSDEX Internetseite parsen

13 Jul 2023, 07:35

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

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

07_13_23 @2_26_48.PNG
07_13_23 @2_26_48.PNG (117.7 KiB) Viewed 1253 times


BSDEX.csv
(129.36 KiB) Downloaded 49 times

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 18 guests