import websocket
import json
import rel
class WsHandler:
def __init__(self):
pass
def on_message(self, ws, message):
obj = json.loads(message)
print(obj["u"], obj["U"])
def on_error(self, ws, error):
print(error)
def on_close(self, ws, close_status_code, close_msg):
print("### closed ###")
def on_open(self, ws):
print("Opened connection")
def wsDiffDepthStream(self, ticker):
# websocket.enableTrace(True)
ws = websocket.WebSocketApp(f"wss://stream.binance.com:9443/ws/{ticker}@depth@100ms",
on_open=self.on_open,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close)
ws.run_forever(dispatcher=rel) # Set dispatcher to automatic reconnection
rel.signal(2, rel.abort) # Keyboard Interrupt
rel.dispatch()
if __name__ == "__main__":
inst = WsHandler()
inst.wsDiffDepthStream("btcusdt")
지금 이 코드는 binance spot market의 호가창 정보를 가져온다.
websocket url은 wss://stream.binance.com:9443/ws/{ticker}@depth@100ms
이다.(뒤에 100ms를 1000ms 로 바꿀수도 있다.)
데이터들은 on_message 함수에서 처리할 수 있다.
websocket으로 들어오는 message의 type은 json 형태의 string으로 들어온다.
따라서 이를 python이 알아 듣기 쉬운 type으로 바꿔줘야하는데 이때 json.loads를 사용하면 dictionary type으로 바꿀 수 있다.
https://stackoverflow.com/questions/4917006/string-to-dictionary-in-python
지금은 print만 해두었지만 나중에 실시간으로 계속 데이터를 저장하거나 다른 함수에서 불러와 사용할 수 있게 만들 수 도 있다.
https://stackoverflow.com/questions/50066428/how-do-i-save-data-from-websocket