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()