I am trying to pull some data from a website. The issue I am having is that it pulls the data value and then goes on to just reprint it continuously rather than pull the most recent live data value and update that. I got the code from https://github.com/BitMEX/api-connectors/tree/master/official-ws/python and made a few changes.
from bitmex_websocket import BitMEXWebsocket
import logging
from time import sleep
# Basic use of websocket.
def run():
logger = setup_logger()
# Instantiating the WS will make it connect. Be sure to add your api_key/api_secret.
ws = BitMEXWebsocket(endpoint="https://www.bitmex.com/api/v1", symbol="XBTUSD",
api_key=None, api_secret=None)
logger.info("Instrument data: %s" % ws.get_instrument())
# Run forever
while(ws.ws.sock.connected):
logger.info("Ticker: %s" % ws.get_ticker())
if ws.api_key:
logger.info("Funds: %s" % ws.funds())
#logger.info("Market Depth: %s" % ws.market_depth())
(logger.info("Recent Trades: %s\n\n" % ws.recent_trades()[0]["size"]))
sleep(1)
def setup_logger():
# Prints logger info to terminal
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Change this to DEBUG if you want a lot more info
ch = logging.StreamHandler()
# create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# add formatter to ch
ch.setFormatter(formatter)
logger.addHandler(ch)
return logger
if __name__ == "__main__":
run()
The issue is that your
ws.get_ticker()
call inside the while loop is not actually getting updated values.From: https://github.com/BitMEX/api-connectors/blob/febf95659ccd2aa5445e0178c4dbb008d1ae9286/official-ws/python/bitmex_websocket.py#L70
See my comments where
lastQuote
andlastTrade
are defined. You should re-createws
after each loop. You'll have to change the condition in your while loop towhile True
if you want to do it forever.EDIT: Added call to
ws.exit()
in the while loop to gracefully closews
before opening a new one.