Daten aus WebSeite auslesen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Zand007
Posts: 2
Joined: 17 Feb 2018, 12:34

Daten aus WebSeite auslesen

17 Feb 2018, 12:42

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
gregster
Posts: 9002
Joined: 30 Sep 2013, 06:48

Re: Daten aus WebSeite auslesen

17 Feb 2018, 15:05

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:

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
(platziere JSON.ahk im selben Verzeichnis und drücke Escape, um das Skript vorzeitig zu beenden)
Last edited by gregster on 17 Feb 2018, 17:19, edited 1 time in total.
Zand007
Posts: 2
Joined: 17 Feb 2018, 12:34

Re: Daten aus WebSeite auslesen

17 Feb 2018, 16:42

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

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Rohwedder and 52 guests