##分からない事
bitFlyerのRelTimeApi をwebsocketを使用した際の書き方が分かりません。
##困っている点
なぜ接続ができないのかが分からず、何をとっかかりに調べればよいのかがわかりません。
###調べた事
以下のようなミニマムコードのプログラムを作成しました。
python
1import websocket 2import json 3import pprint 4import time 5 6class RealtimeAPI(object): 7 8 def __init__(self,url,channel): 9 self.url = url 10 self.channel = channel 11 self.ws = websocket.WebSocketApp(self.url,header=None,on_message=self.on_message,\ 12 on_open=self.on_open,on_close=self.on_close,on_error=self.on_error) 13 # websocket.enableTrace(True) 14 15 def run(self): 16 self.ws.run_forever() 17 18 def on_message(self,message): 19 message = json.loads(message) 20 print(message) 21 22 def on_error(self,error): 23 print(error) 24 25 def on_open(self): 26 print("websocket connection started.") 27 ws.send(json.dumps({"method": "subscribe","params": {"channel": self.channel}})) 28 29 def on_close(self): 30 print("###websocket connection closed.###") 31 32if __name__ == "__main__": 33 url = "wss://ws.lightstream.bitflyer.com/json-rpc" 34 channel = "lightning_executions_FX_BTC_JPY" 35 json_rpc = RealtimeAPI(url=url,channel=channel) 36 json_rpc.run()
実行したところ、以下のようなエラーが発生しました。
[WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
理由はわかりませんが、on_openメソッドを通っていないようです。
次に、
https://github.com/websocket-client/websocket-client にある以下のサンプルコードを実行してみました。
python
1import websocket 2try: 3 import thread 4except ImportError: 5 import _thread as thread 6import time 7 8def on_message(ws, message): 9 print(message) 10 11def on_error(ws, error): 12 print(error) 13 14def on_close(ws): 15 print("### closed ###") 16 17def on_open(ws): 18 def run(*args): 19 for i in range(3): 20 time.sleep(1) 21 ws.send("Hello %d" % i) 22 time.sleep(1) 23 ws.close() 24 print("thread terminating...") 25 thread.start_new_thread(run, ()) 26 27if __name__ == "__main__": 28 websocket.enableTrace(True) 29 ws = websocket.WebSocketApp("ws://echo.websocket.org/", 30 on_open = on_open, 31 on_message = on_message, 32 on_error = on_error, 33 on_close = on_close) 34 35 ws.run_forever()
このプログラムを実行したところ、
Hello 0
send: b'\x81\x87Tm\x8fm\x1c\x08\xe3\x01;M\xbe'
Hello 1
send: b'\x81\x87\n\xce\x06\xa7B\xabj\xcbe\xee4'
Hello 2
send: b'\x88\x82\xb1\x9f)\xc4\xb2w'
closed ###
thread terminating...
と出力されうまく通信が出来ているようでした。
そこで、
https://bf-lightning-api.readme.io/docs/endpoint-json-rpc に記載されているエンドポイント(wss://ws.lightstream.bitflyer.com/json-rpc)に書き換えて実行してみました。
python
1if __name__ == "__main__": 2 websocket.enableTrace(True) 3 ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc", 4 on_open = on_open, 5 on_message = on_message, 6 on_error = on_error, 7 on_close = on_close) 8 9 ws.run_forever()
先ほどと同じく、以下のエラーが出力されるかつ、on_openメソッドすら実行されません。
[WinError 10060] 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
これは何が問題なのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/10 06:34