Grundlegendes zu Python-HTTP-streaming
Ich bin kämpfen, um den Zugriff auf ein streaming-API mit Python und Anfragen.
Was die API sagt: "Wir haben uns ermöglicht, eine streaming-Endpunkt für die Anforderung von sowohl Angebot und Handel mit Daten unter Verwendung einer persistenten HTTP-socket-Verbindung. Streaming-Daten aus der API besteht aus der Herstellung einer Authentifizierten HTTP-request und verlassen das HTTP-socket öffnen, um kontinuierlich Daten empfangen."
Wie ich versucht habe auf die Daten zugreifen:
s = requests.Session()
def streaming(symbols):
url = 'https://stream.tradeking.com/v1/market/quotes.json'
payload = {'symbols': ','.join(symbols)}
return s.get(url, params=payload, stream=True)
r = streaming(['AAPL', 'GOOG'])
Den Anforderungen docs hier zeigen zwei Dinge von Interesse: Verwenden Sie einen generator/iterator für die Verwendung mit chunked-data, ging in das Feld. Für das streaming von Daten, es schlägt mit einem code wie:
for line in r.iter_lines():
print(line)
Weder scheint zu funktionieren, obwohl ich habe keine Ahnung, was in dem generator-Funktion, die seit der Beispiel, ist unklar. Mit Hilfe von r ist.iter_lines(), bekomme ich die Ausgabe: "b" {"status":"connected"}{"status":disconnected"}'"
Kann ich den Zugriff auf die Header, und die Antwort HTTP 200, aber keine gültigen Daten, oder finden Sie klare Beispiele auf, wie Sie Zugang zu streaming-HTTP-Daten in python. Jede Hilfe würde geschätzt werden. Die API empfiehlt die Verwendung von Jetty für Java zu halten, den stream zu öffnen, aber ich bin mir nicht sicher, wie man dies in Python.
Headers: {'Verbindung': 'keep-alive', 'content-type': 'application/json', 'x-powered-by': 'Express', 'transfer-encoding': 'chunked'}
wenn OP sieht
200 OK
dann offensichtlich hat er auth getan.Die API erfordert in der Tat auth. Ich verließ die auth-Zeilen für die Einfachheit. Ich würde post, die Schlüssel, aber Sie sind verbunden mit meinem trading-Konto. Für die nicht-streaming-Anfragen, ich benutze Anfrage .json(). Vielleicht muss ich machen, dass auch hier nicht sicher.
Verpasste die 200 Antwort zunächst, mein schlechtes. Wollte nur auch noch sagen, dass eine schöne Gewohnheit für api-keys ist, Sie zu Lesen aus einer Datei, die über eine eigene Funktion. Auf diese Weise können Sie kopieren/einfügen von code-snippets, ohne sich Gedanken, und es ist leicht zu zählen, dass die Datei in .gitignore an, wenn Sie mit git.
InformationsquelleAutor Turtles Are Cute | 2013-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob Sie dachte, dies aus, aber TradeKing, die keine Zeilenumbrüche zwischen den JSON-blobs. Sie haben somit zu verwenden iter_content, um es byte für byte, append (byte in einen Puffer, versuchen zu entziffern-Puffer auf Erfolg klar, der Puffer und die Ausbeute des resultierenden Objekts. 🙁
krillr, können Sie bitte eine URL auf jede hilfreiche info bezüglich Ihrer Lösung mit Knoten und ZeroMQ. Sehr geschätzt
InformationsquelleAutor krillr
Als verbsintransit hat angegeben, müssen Sie lösen Ihre Probleme bei der Authentifizierung, Ihre streaming-Probleme, die jedoch behoben werden können indem diesem Beispiel:
Den
if line:
Bedingung ist zu überprüfen, ob dieline
ist eine tatsächliche Nachricht oder einfach nur ein connection-keep-alive.Der Schlüssel bit für dieses Beispiel ist die
stream=True
imsend()
. Wenn Sie nicht festlegen, dass Anfragen versucht, download des gesamten Körpers. Die Dokumentation zeigt das Schlüsselwort in verwenden.Fehler, die ich habe ist wie folgt: ConnectionError: ('Verbindung abgebrochen.', RemoteDisconnected('Remote end closed connection ohne Antwort',))
Ich würde wirklich gerne machen, dieser Ansatz funktioniert. Ich erlebe Fehler und nicht klar, wie man über die debugging: urllib3.Ausnahmen.ProtocolError: ('Verbindung abgebrochen.', ConnectionResetError(54, 'Connection reset by peer'))
InformationsquelleAutor user581592