Error de Websocket: "Estado de protocolo de enlace 403 prohibido"

tengo un problema con mi código escrito que escribí con la ayuda de esta documentación: https://exchange.blockchain.com/api/#introduction .

El código debe enviar mensajes, recibir mensajes y luego quiero trabajar con los mensajes recibidos. Y eso 3 veces al día (mañana, tarde y noche). Sin embargo, el código parece estar funcionando a veces, en realidad hasta 6 días (registro, ¡sí!) y luego deja de funcionar y aparece un error:

Traceback (most recent call last):

  File "<ipython-input-1-052db9d33d34>", line 1, in <module>
    runfile('Pathtofile/File.py', wdir='workingdirectory')

  File "C:\Users\iamdabest\Downloads\latexNpython\WinPython64-3.6.8.0\python-

3.6.8.amd64\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 

786, in runfile
    execfile(filename, namespace)

  File "C:\Users\orami?\Downloads\latexNpython\WinPython64-3.6.8.0\python-

3.6.8.amd64\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 

110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "Pathtofile/File.py", line 235, in <module>
    main()

  File "Pathtofile/File.py", line 229, in main
    trigger(updater.bot)

  File "Pathtofile/File.py", line 171, in trigger
    y = price_func()[0]

  File "Pathtofile/File.py", line 46, in price_func
    ws = create_connection(url, **options) 

  File "C:\Users\name\Downloads\latexNpython\WinPython64-3.6.8.0\python-

3.6.8.amd64\lib\site-packages\websocket\_core.py", line 606, in 

create_connection
    websock.connect(url, **options)

  File "C:\Users\name\Downloads\latexNpython\WinPython64-3.6.8.0\python-

3.6.8.amd64\lib\site-packages\websocket\_core.py", line 253, in connect
    self.handshake_response = handshake(self.sock, *addrs, **options)

  File "C:\Users\name\Downloads\latexNpython\WinPython64-3.6.8.0\python-

3.6.8.amd64\lib\site-packages\websocket\_handshake.py", line 57, in handshake
    status, resp = _get_resp_headers(sock)

  File "C:\Users\name\Downloads\latexNpython\WinPython64-3.6.8.0\python-

3.6.8.amd64\lib\site-packages\websocket\_handshake.py", line 143, in 

_get_resp_headers
    raise WebSocketBadStatusException("Handshake status %d %s", status, 

status_message, resp_headers)
 
WebSocketBadStatusException: Handshake status 403 Forbidden

Ahora, tenga en cuenta que nunca un profesional capacitado me enseñó estas cosas. Todo el conocimiento que obtuve proviene de jugar (trazar y analizar datos) con python y la ayuda de Internet. Realmente no entiendo por qué funciona unos días y luego deja de funcionar de repente.

Mis preguntas:

  1. De hecho, no tengo ningún problema cuando los códigos no dan una salida siempre que siga funcionando. Entonces, ¿cómo puedo decirle al código que "ignore" el error y siga moviéndose o tal vez que reinicie automáticamente el código si ocurre el error? Intenté cosas simples como ifdeclaraciones o tryy expectpero no tuve éxito.
  2. ¿El error viene porque falló la autenticación entre el servidor y el cliente? o que significa?
  3. ¿Hay otra solución? Ya leí en alguna parte para usar otro websocket (websockets) pero no pude hacerlo funcionar.

Aquí hay un (M) WE de mi código:

from websocket import create_connection
import json

options = {}
options['origin'] = 'https://exchange.blockchain.com'
url = "wss://ws.prod.blockchain.info/mercury-gateway/v1/ws"

def price_func():
        ws = create_connection(url, **options) 
        msg = '{"token": "mysecretAPItoken", "action": "subscribe", "channel": "auth"}' # here i subscribe
        ws.send(msg)
        
        msg = '{"action": "subscribe", "channel": "balances"}' # here i am asking for the json files
        ws.send(msg)
        result1 =  json.loads(ws.recv()) # first answer is the confirmation of connecting
        result2 = json.loads(ws.recv()) # save the received answers to work with them later
        
        msg = '{"token": "mysecretAPItoken", "action": "unsubscribe", "channel": "balances"}' # unsubscribing, not sure if i need to do that but it seems to me like 'clean' working; if smth goes wrong it unsubscribes.
        ws.send(msg) 
        
        msg = '{"token": "mysecretAPItoken", "action": "unsubscribe", "channel": "auth"}' # unsubscribing; same as 3 lines above
        ws.send(msg)
        ws.close() 
        return result2['balances'][0]['rate'], result2['balances'][1]['rate'] # gives me the prices

x = price_func()[0]
print('Price of Shitcoin is around' + str(round(x,2)))

Gracias por cualquier ayuda.

Answer