Код с подключением к вебсокету останавливается через время. Python
Пишу небольшой код, который вытягивает мой баланс на бирже KuCoin. Я использую технологию вебсокетов, но проблема заключается в том что через какое-то время(может через 2 часа, а может и через сутки) код по какой-то причине престаёт работать. При этом никакой ошибки нет, просто process finished with exit code 0
Вот мой код:
import base64
import hashlib
import hmac
import json
import time
from datetime import datetime
import requests
import websocket
from websocket._exceptions import WebSocketConnectionClosedException
from config import APIs
from database import DB
api_public = APIs['KuCoin']['public']
api_private = APIs['KuCoin']['private']
api_passphrase = APIs['KuCoin']['passphrase']
db = DB()
def on_open(ws):
request = {
"id": int(time.time() * 1000),
"type": "subscribe",
"topic": "/account/balance",
"privateChannel": True,
"response": True
}
ws.send(json.dumps(request))
def on_message(ws, message):
data = json.loads(message)
print(data)
# Записываю балансы в базу данных
if 'data' in data.keys():
db.execute('''
delete from KuCoinWallet where coin = %s
''', (data['data']['currency'],))
db.execute('''
insert into KuCoinWallet(coin, amount) values(%s, %s)
''', (data['data']['currency'], data['data']['available']))
def on_error(ws, error):
if type(error) is WebSocketConnectionClosedException:
main()
def make_signature(timestamp):
string = timestamp + 'POST' + '/api/v1/bullet-private'
signature = base64.b64encode(
hmac.new(api_private.encode('utf-8'), string.encode('utf-8'), hashlib.sha256).digest())
return signature
def make_passphrase():
passphrase = base64.b64encode(
hmac.new(api_private.encode('utf-8'), api_passphrase.encode('utf-8'), hashlib.sha256).digest())
return passphrase
def on_ping(ws, *data):
print('рing')
def on_pong(ws, *data):
print('pong received')
def main():
timestamp = str(int(time.time() * 1000))
headers = {
'KC-API-KEY': api_public,
'KC-API-SIGN': make_signature(timestamp),
'KC-API-TIMESTAMP': timestamp,
'KC-API-PASSPHRASE': make_passphrase(),
'KC-API-KEY-VERSION': '2',
"Content-Type": "application/json"
}
token = json.loads(requests.request(method='POST', url='https://api.kucoin.com/api/v1/bullet-private',
headers=headers).text)['data']['token']
url = f'wss://ws-api-spot.kucoin.com?token={token}&[connectId={timestamp}]'
ws = websocket.WebSocketApp(
url=url,
on_open=on_open,
on_message=on_message,
on_ping=on_ping,
on_pong=on_pong
)
ws.run_forever(
ping_interval=20,
ping_timeout=10
)
if __name__ == '__main__':
main()