2015-11-17 20 views
8

Próbuję zasubskrybować publiczny kanał API websocket Bitfinex.com BTCUSD.Jak zasubskrybować kanał Websocket API przy użyciu języka Python?

Oto kod:

from websocket import create_connection 
ws = create_connection("wss://api2.bitfinex.com:3000/ws") 
ws.connect("wss://api2.bitfinex.com:3000/ws") 
ws.send("LTCBTC") 
while True: 

    result = ws.recv() 
    print ("Received '%s'" % result) 

ws.close() 

wierzę ws.send("BTCUSD"), co zgadza się z kanałem publicznym? Otrzymuję komunikat zwrotny, który moim zdaniem potwierdza subskrypcję ({"event":"info","version":1}, ale później nie otrzymuję strumienia danych. czego mi brakuje?

Aktualizacja: Oto kod, który w końcu zadziałał.

import json 

from websocket import create_connection 
ws = create_connection("wss://api2.bitfinex.com:3000/ws") 
#ws.connect("wss://api2.bitfinex.com:3000/ws") 
ws.send(json.dumps({ 
    "event": "subscribe", 
    "channel": "book", 
    "pair": "BTCUSD", 
    "prec": "P0" 
})) 


while True: 
    result = ws.recv() 
    result = json.loads(result) 
    print ("Received '%s'" % result) 

ws.close() 
+0

Jeśli pracujesz z interfejsem API, najpierw przeczytaj dokument. http://docs.bitfinex.com/#subscribe-to-channels –

+0

Przeczytałem dokładnie te dokumenty. I o ile mogę powiedzieć, brakuje mi właściwego kodu do zasubskrybowania kanału. Jednak przejrzenie całej dokumentacji tutaj https://pypi.python.org/pypi/websocket-client/ następnie wyślij ("LTCBTC") jest właściwym sposobem na subskrypcję. Co ja robię źle? – Emily

Odpowiedz

7

The documentation mówi, że wszystkie wiadomości są kodowane JSON.

kodowania wiadomości

Każda wiadomość wysyłane i odbierane poprzez kanał websocket w Bitfinex jest zakodowany w formacie JSON

trzeba importować json bibliotekę, do kodowania i dekodowania wiadomości.

The documentation wymienia trzy kanały publiczne: book, trades i ticker.
Jeśli chcesz zasubskrybować kanał, musisz wysłać wydarzenie subskrypcji.

Przykład subskrypcji galanterii LTCBTC według the documentation:

ws.send(json.dumps({ 
    "event":"subscribe", 
    "channel":"trades", 
    "channel":"LTCBTC" 
}) 

Następnie trzeba także analizować przychodzące JSON zakodowane wiadomości.

result = ws.recv() 
result = json.loads(result) 
+0

Dziękuję. To działa. . – Emily

+0

@Emily, jeśli odpowiedź rozwiązała Twój problem, rozważ zaakceptowanie go, nagradza go i pomaga przyszłym odwiedzającym zidentyfikować rozwiązania łatwiejszym –