我正在尝试通过 WebSocket 建立连接以从加密货币市场检索数据。我对编程并不陌生,但从现在开始我主要使用 C++ 基础知识。我学了一点 Python 因为它看起来更容易设置,然后去阅读了 WebSocket 文档。
我设法建立了一些好的东西,从 Binance 检索信息并将它们转换为变量以进行操作。问题是在程序运行时,我随机得到这个错误:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "<stdin>", line 2, in connection
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 353, in recv
opcode, data = self.recv_data()
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 376, in recv_data
opcode, frame = self.recv_data_frame(control_frame)
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 416, in recv_data_frame
self.pong(frame.data)
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 342, in pong
self.send(payload, ABNF.OPCODE_PONG)
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 282, in send
return self.send_frame(frame)
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_core.py", line 303, in send_frame
data = frame.format()
File "C:\Users\super\AppData\Local\Programs\Python\Python38\lib\site-packages\websocket\_abnf.py", line 238, in format
mask_key = self.get_mask_key(4)
TypeError: 'str' object is not callable
它似乎是随机弹出的,因为我记下了它出现在哪个循环中,而且它永远不会相同:有时在 30 个循环之后,有时在 200 个循环之后。
在我看来,库中可能有一个称为函数的“str”变量,但我真的不知道如何解决这个问题。
程序代码如下:
import websocket
import json
socket = 'wss://stream.binance.com:9443/ws/xrpusdt@kline_5m'
def on_message(message):
json_message = json.loads(message)
candle = json_message['k']
is_closed = candle['x']
open = candle['o']
close = candle['c']
high = candle['h']
low = candle['l']
vol = candle['v']
print("Apertura: ", open)
print("Chiusura: ", close)
print("Massimo: ", high)
print("Minimo: ", low)
print("Volume: ",vol)
print("Candela chiusa: ", is_closed)
return(open,close,high,low,vol,is_closed)
def on_close(ws, close_status_code, close_msg):
print("Connection closed")
ws = websocket.WebSocket(socket)
def connection():
data = ws.recv()
o,c,h,l,v,ic = on_message(data)
#variabili convertite in float
open_f = float(o)
close_f = float(c)
high_f = float(h)
low_f = float(l)
v_f = float(v)
#variazione percentuale
var_perc = ((close_f/open_f)-1)*100
print("Variazione: ", var_perc,"%")
var_perc = ((close_f/open_f)-1)*100*75
print("Variazione con leva x75: ", var_perc,"%")
print("\n")
return(open_f,close_f,high_f,low_f,v_f,var_perc,ic)
a=0
while 'true':
ws.connect(socket, suppress_origin=True)
open,close,high,low,volume,var,is_closed = connection()
ws.close()
a=a+1
print(str(a))
变量 'a' 仅用于计数循环,我试图删除该功能,但一直有问题,所以不是那样。
如果有人愿意帮忙,非常感谢,我不是专业的程序员,所以如果问题很容易解决,请不要对我大喊大叫,因为我真的很想自己找到解决方案。