websockets-finnhub/finnhub-websockets.py (30 lines of code) (raw):

import json import datetime import websocket from elasticsearch import Elasticsearch es = Elasticsearch( cloud_id="<my-cloud-id>", http_auth=("elastic", "<my-cloud-password"), ) def on_message(ws, message): message_json = json.loads(message) message_json["@timestamp"] = datetime.datetime.utcnow().isoformat() res = es.index(index="websockets-data", body=message_json) print(message_json) def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): ws.send('{"type":"subscribe","symbol":"AAPL"}') ws.send('{"type":"subscribe","symbol":"AMZN"}') ws.send('{"type":"subscribe","symbol":"TSLA"}') ws.send('{"type":"subscribe","symbol":"ESTC"}') if __name__ == "__main__": websocket.enableTrace(True) ws = websocket.WebSocketApp("wss://ws.finnhub.io?token=<my-finnhub-token>", on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever()