Hallo
Ich versuche gerade einzelne Daten aus folgender API Webseite zu extrahieren. https://www.binance.com/api/v1/ticker/allBookTickers
Ich kann diese Daten natürlich über UrlDownloadFile in eine .txt oder .ini speichern.
Aber wie kann ich danach einen einzelnen Wert aus dieser Datei lesen ?
Ich habe bereits herausgefunden das die API Daten im json Format sind.
Würde mich sehr über eure Hilfe freuen
Danke
Daten aus WebSeite auslesen
Moderator: jNizM
Re: Daten aus WebSeite auslesen
Willkommen im Forum, Zand007,
solche API-Daten sind tatsächlich meist im JSON-Format (als Zeichenkette); das Handling/Parsing lässt sich wesentlich vereinfachen, indem man eine entsprechende Hilfsbibliothek verwendet, um den erhaltenen String als Objekt ansprechen und auslesen zu können. Ich empfehle: Cocos JSON Lib ( https://autohotkey.com/boards/viewtopic.php?t=627 ). Die kann dann mit #include in dein Skript eingebunden und genutzt werden.
Bei den abgerufenen Daten handelt es sich um ein 0-basiertes Array von JSON-Objekten (zumindest in der Browser-Darstellung von https://www.binance.com/api/v1/ticker/allBookTickers), d. h. wenn wann nur bestimmte Werte auslesen will, muss man schauen, an welcher Stelle das gesuchte Objekt im Array steht (Vorsicht: AHK-Arrays sind 1-basiert, siehe Beispiel unten), vorausgesetzt diese Position ändert sich nicht. Man kann aber auch das gesamte Array durchlaufen, wenn man will.
Hier ein Beispiel, das alle Einträge durchläuft:
(platziere JSON.ahk im selben Verzeichnis und drücke Escape, um das Skript vorzeitig zu beenden)
solche API-Daten sind tatsächlich meist im JSON-Format (als Zeichenkette); das Handling/Parsing lässt sich wesentlich vereinfachen, indem man eine entsprechende Hilfsbibliothek verwendet, um den erhaltenen String als Objekt ansprechen und auslesen zu können. Ich empfehle: Cocos JSON Lib ( https://autohotkey.com/boards/viewtopic.php?t=627 ). Die kann dann mit #include in dein Skript eingebunden und genutzt werden.
Bei den abgerufenen Daten handelt es sich um ein 0-basiertes Array von JSON-Objekten (zumindest in der Browser-Darstellung von https://www.binance.com/api/v1/ticker/allBookTickers), d. h. wenn wann nur bestimmte Werte auslesen will, muss man schauen, an welcher Stelle das gesuchte Objekt im Array steht (Vorsicht: AHK-Arrays sind 1-basiert, siehe Beispiel unten), vorausgesetzt diese Position ändert sich nicht. Man kann aber auch das gesamte Array durchlaufen, wenn man will.
Hier ein Beispiel, das alle Einträge durchläuft:
Code: Select all
#include JSON.ahk ; https://autohotkey.com/boards/viewtopic.php?t=627
URLDownloadToFile, https://www.binance.com/api/v1/ticker/allBookTickers, apidata.txt ; alternativ eine der URLDownloadToVar-Varianten aus dem Forum nutzen
FileRead, apidata, apidata.txt
arrayOfObjects := JSON.load(apidata) ; verwandle JSON-String in ein Objekt
loop % arrayOfObjects.length() ; durchlaufe das gesamte Array; wenn die interessanten Werte immer an derselben Stelle stehen, könnte man den/die entsprechenden Index(e) jedoch auch gezielt auslesen.
{
item := arrayOfObjects[A_index] ; beachte: das AHK-Array ist 1-basiert: Position 0 im Original ist Position 1 in unserem Array
; Greife auf die einzelnen Elemente des Objekts zu: (`r`n bewirkt einen Zeilenumbruch)
msgbox % "Array-Index: " (A_index-1) "`r`nSymbol: " item.symbol "`r`nBidPrice: " item.bidPrice "`r`nBidQty: " item.bidQty "`r`nAskPrice: " item.askPrice "`r`nAskQty: " item.askQty
}
ExitApp
Esc::ExitApp ; beende Skript vorzeitig
Last edited by gregster on 17 Feb 2018, 17:19, edited 1 time in total.
Re: Daten aus WebSeite auslesen
Hallo Gregster
Vielen Dank für Deine Hilfe. Und Danke für die ausführliche Beschreibung im Programm.
Genau das habe ich gebraucht.Habe vorher stundenlang experimentiert.....ohne Erfolg.
Bin relativ neu und habe jetzt das erste mal Hilfe gebraucht und ich bin begeistert von dem Forum.
Jetzt muss ich das nur noch in meinen Code einfügen und etwas abändern.
Grüsse
Vielen Dank für Deine Hilfe. Und Danke für die ausführliche Beschreibung im Programm.
Genau das habe ich gebraucht.Habe vorher stundenlang experimentiert.....ohne Erfolg.
Bin relativ neu und habe jetzt das erste mal Hilfe gebraucht und ich bin begeistert von dem Forum.
Jetzt muss ich das nur noch in meinen Code einfügen und etwas abändern.
Grüsse
Who is online
Users browsing this forum: Helmut2 and 31 guests