python websocket parsing mysql

275
07 июня 2022, 11:10

Всем привет! Помогите с кодом. Вопрос такой: могу ли я как то транслировать эти данные в mysql (mysql не принципиален, можно и другую БД)? Данные идут ("ask":3814.18,"bid":3813.18 "epoch":1605111582 "quote":3813.68,"symbol":"R_100"). Как их отфильтровать и импортировать в БД не пойму, может я могу как то с ними еще работать вывести в CSV? Перелопатил уже много кода и не могу понять в какую сторону двигаться.

import websocket
import json
websocket.enableTrace(True)
apiUri = "wss://ws.binaryws.com/websockets/v3?app_id=1089"
Object = {'ticks':'R_100'}
def ws_open(ws):
    json_data = json.dumps(Object)
    ws.send(json_data)
def ws_message(ws, message):
    print('ticks update: %s' % message)
ws = websocket.WebSocketApp(apiUri,on_message = ws_message)
ws.on_open = ws_open
ws.run_forever()

получаю ответ

-— request header —-
GET /websockets/v3?app_id=1089 HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: ws.binaryws.com
Origin: http://ws.binaryws.com
Sec-WebSocket-Key: N9Wt6WRmwv420L/KZbIPBQ==
Sec-WebSocket-Version: 13
-— response header —-
HTTP/1.1 101 Switching Protocols
Date: Wed, 11 Nov 2020 16:19:41 GMT
Content-Length: 0
Connection: upgrade
Set-Cookie: __cfduid=de8bd711cb15530a0bfe128ee60ee5a8b1605111581; expires=Fri, 11-Dec-20 16:19:41 GMT; path=/; domain=.binaryws.com; HttpOnly; SameSite=Lax
Content-Language: en
Upgrade: websocket
Sec-WebSocket-Accept: mIwXeHSTBPUuIdoMtoy7h6FYwNs=
CF-Cache-Status: DYNAMIC
cf-request-id: 0659b4214700007b53829d8000000001
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 5f09561539857b53-DME

send: b'\x81\x92b\xa7\xfa\xb4\x19\x85\x8e\xdd\x01\xcc\x89\x96X\x87\xd8\xe6=\x96\xca\x84@\xda'
ticks update: {"echo_req":{"ticks":"R_100"},"msg_type":"tick","subscription":{"id":"9e68208d-1efe-5ed1-1735-fb2d6d264f27"},"tick":{"ask":3814.18,"bid":3813.18,"epoch":1605111582,"id":"9e68208d-1efe-5ed1-1735-fb2d6d264f27","pip_size":2,"quote":3813.68,"symbol":"R_100"}}

сейчас имею такой ответ,а если точнее их один двух видов, но в ответе они в одну строку,так как внес еще строку websocket.debug(json.dumps(message)) в ws_message в целях эксперимента

ticks update: {"echo_req":{"ticks":"R_100"},"msg_type":"tick","subscription":{"id":"99d4512b-fd98-85ea-9417-2494ee2a3857"},"tick":{"ask":3541.87,"bid":3541.07,"epoch":1606484220,"id":"99d4512b-fd98-85ea-9417-2494ee2a3857","pip_size":2,"quote":3541.47,"symbol":"R_100"}}
"{\"echo_req\":{\"ticks\":\"R_100\"},\"msg_type\":\"tick\",\"subscription\":{\"id\":\"99d4512b-fd98-85ea-9417-2494ee2a3857\"},\"tick\":{\"ask\":3541.87,\"bid\":3541.07,\"epoch\":1606484220,\"id\":\"99d4512b-fd98-85ea-9417-2494ee2a3857\",\"pip_size\":2,\"quote\":3541.47,\"symbol\":\"R_100\"}}"
def ws_message(ws, message):
    print('ticks update: %s' % message)
    websocket.debug(json.dumps(message))
Answer 1

мне подсказывал один человек что надо делать return так как типо туда нечего не возвращается но если я делаю

return ws_message(ws, message)

код спамит с задержкой в милисекунду(образно) одну и туже строку типа как ответ выше и падает с такими словами

    Python runtime state: initialized
    
    Thread 0x00000b74 (most recent call first):
      File "C:\Python39\lib\threading.py", line 316 in wait
      File "C:\Python39\lib\threading.py", line 574 in wait
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\pydevd.py", line 228 in _on_run
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 168 in run
      File "C:\Python39\lib\threading.py", line 950 in _bootstrap_inner
      File "C:\Python39\lib\threading.py", line 908 in _bootstrap
    
    Thread 0x00003d98 (most recent call first):
      File "C:\Python39\lib\threading.py", line 316 in wait
      File "C:\Python39\lib\threading.py", line 574 in wait
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\pydevd.py", line 182 in _on_run
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 168 in run
      File "C:\Python39\lib\threading.py", line 950 in _bootstrap_inner
      File "C:\Python39\lib\threading.py", line 908 in _bootstrap
    
    Thread 0x00003c44 (most recent call first):
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 282 in _read_line
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 300 in _on_run
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 168 in run
      File "C:\Python39\lib\threading.py", line 950 in _bootstrap_inner
      File "C:\Python39\lib\threading.py", line 908 in _bootstrap
    
    Thread 0x00002690 (most recent call first):
      File "C:\Python39\lib\threading.py", line 316 in wait
      File "C:\Python39\lib\queue.py", line 180 in get
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 411 in _on_run
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 168 in run
      File "C:\Python39\lib\threading.py", line 950 in _bootstrap_inner
      File "C:\Python39\lib\threading.py", line 908 in _bootstrap
    
    Current thread 0x00003ec4 (most recent call first):
      File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_trace_dispatch_regular.py", line 368 in __call__
      File "C:\Python39\lib\logging\__init__.py", line 425 in _format
      File "C:\Python39\lib\logging\__init__.py", line 430 in format
      File "C:\Python39\lib\logging\__init__.py", line 631 in formatMessage
      File "C:\Python39\lib\logging\__init__.py", line 662 in format
      File "C:\Python39\lib\logging\__init__.py", line 923 in format
      File "C:\Python39\lib\logging\__init__.py", line 1079 in emit
      File "C:\Python39\lib\logging\__init__.py", line 948 in handle
      File "C:\Python39\lib\logging\__init__.py", line 1649 in callHandlers
      File "C:\Python39\lib\logging\__init__.py", line 1587 in handle
      File "C:\Python39\lib\logging\__init__.py", line 1577 in _log
      File "C:\Python39\lib\logging\__init__.py", line 1422 in debug
      File "C:\Python39\lib\site-packages\websocket\_logging.py", line 68 in debug
      File "C:\Users\NoName\source\repos\PythonApplication2\PythonApplication2\PythonApplication2.py", line 18 in ws_message
      File "C:\Users\NoName\source\repos\PythonApplication2\PythonApplication2\PythonApplication2.py", line 19 in ws_message
если делаю так то получаю две строки сообщения и поидее одна из них нормальный json
    def ws_message(ws, message):
        parser = json.loads(message)
        json_eho = json.dumps(parser)
        print(str(json_eho))
        print(str(parser))
        return (parser)

если делаю return(json_eho) ответы меняю кавычки с одних на другие и все

{'echo_req': {'ticks': 'R_100'}, 'msg_type': 'tick', 'subscription': {'id': 'cd11f737-8235-8db2-8c5f-a57d9e16eabd'}, 'tick': {'ask': 3320.55, 'bid': 3319.75, 'epoch': 1606520352, 'id': 'cd11f737-8235-8db2-8c5f-a57d9e16eabd', 'pip_size': 2, 'quote': 3320.15, 'symbol': 'R_100'}}
    
{"echo_req":{"ticks":"R_100"},"msg_type":"tick","subscription":"id":"cd11f737-8235-8db2-8c5fa57d9e16eabd"},"tick":"ask":3320.55,"bid":3319.75,"epoch":1606520352,"id":"cd11f737-8235-8db2-8c5f-57d9e16eabd","pip_size":2,"quote":3320.15,"symbol":"R_100"}}

как передать эту строку дальше чтобы я хотя бы мог сделать print(websocket_message) вне функции

Answer 2

Дошёл до такого варианта)) всё в переменных, не понимаю могу ли я как то передать строку в mysql и распарсить её в какую нить таблицу, или сначала её надо записать в файл, а потом обрабатывать файл, главное что у меня уже всё не в потоке

import json
import websocket
from websocket import create_connection
websocket.enableTrace(True)
ws = create_connection('wss://ws.binaryws.com/websockets/v3?app_id=1089')
ws.send(json.dumps({'ticks': 'R_100'}))
result = ws.recv()
parser = json.loads(result)
json_eho = json.dumps(parser)
print(json_eho)

получаю ответ

{"echo_req": {"ticks": "R_100"}, "msg_type": "tick", "subscription": {"id": "0e37ccf0-3ed2-ad75-f28a-47a2bedd1ac8"}, "tick": {"ask": 3405.39, "bid": 3404.59, "epoch": 1606578100, "id": "0e37ccf0-3ed2-ad75-f28a-47a2bedd1ac8", "pip_size": 2, "quote": 3404.99, "symbol": "R_100"}}
READ ALSO
Двойное освобождение памяти С++

Двойное освобождение памяти С++

Недавно начал использовать vector в С++, столкнулся с ошибкой:

276
Несколько окон. Qt

Несколько окон. Qt

Вообщем, не понимаю как правильно создавать второе окноЕсть функция addTimer(), как метод класса главного окна MainWindow

217
Среднее арифметическое данных массива (который элемент структуры динамического массива)

Среднее арифметическое данных массива (который элемент структуры динамического массива)

Имеется следующая проблемаЕсть функция для расчета среднего балла (индивидуальных и общего)

222
Можно ли double "засунуть" в bitset, чтобы он вывел его в 2виде?

Можно ли double "засунуть" в bitset, чтобы он вывел его в 2виде?

Можно ли double "засунуть" в bitset, чтобы он вывел его в 2виде?

269