summaryrefslogtreecommitdiffstats
path: root/server.fcgi
diff options
context:
space:
mode:
Diffstat (limited to 'server.fcgi')
-rw-r--r--server.fcgi90
1 files changed, 90 insertions, 0 deletions
diff --git a/server.fcgi b/server.fcgi
new file mode 100644
index 0000000..3803786
--- /dev/null
+++ b/server.fcgi
@@ -0,0 +1,90 @@
+#!/usr/local/bin/python3
+
+import os
+from datetime import datetime, timedelta
+from pathlib import Path
+from threading import Lock
+
+import requests
+from flask import Flask, request, Response
+
+app = Flask(__name__)
+api_key = os.environ["POLYGON_API_KEY"]
+
+log_file = "/tmp/etlas.log"
+
+def get_tickers():
+ tab = []
+
+ with open("tickers.txt", "r") as f:
+ raw = f.read()
+
+ with open(log_file, "w") as log:
+ log.write(raw)
+
+ lines = raw.split('\n')
+
+ for line in lines:
+ if line:
+ parts = line.split()
+ tab.append({
+ "name": parts[0],
+ "price": parts[1]
+ })
+
+ return tab
+
+n = 0
+mtx = Lock()
+
+@app.route("/prices")
+def get_stock_prices():
+ global n, updated
+
+ with mtx:
+ tickers = get_tickers()
+
+ if len(tickers) == 0:
+ return Response("", status=204, mimetype="text/plain")
+
+ # tickers have been deleted from config
+ if n > len(tickers) - 1:
+ n = 0
+
+ ticker = tickers[n]["name"]
+ price = tickers[n]["price"]
+
+ date = datetime.today()
+ e_date = date.strftime("%Y-%m-%d")
+ s_date = (date - timedelta(days=90)).strftime("%Y-%m-%d")
+
+ base = "https://api.massive.com/v2/aggs/ticker"
+ query = f"adjusted=true&sort=asc&apiKey={api_key}"
+ url = f"{base}/{ticker}/range/1/day/{s_date}/{e_date}?{query}"
+
+ res = requests.get(url)
+
+ with open(log_file, "a") as log:
+ log.write("\n\n")
+ log.write(res.text)
+
+ result = f"{ticker}\n{price}\n"
+
+ if res.status_code == 200:
+ data = res.json()
+ if "results" in data:
+ for item in data["results"]:
+ result += f"{item['c']:.2f}\n"
+
+ n = (n + 1) % len(tickers)
+
+ return Response(result, status=res.status_code, mimetype="text/plain")
+
+if __name__ == '__main__':
+ from flup.server.fcgi import WSGIServer
+ sock = Path('/var/www/run/etlas.sock').resolve()
+ try:
+ sock.unlink()
+ except:
+ pass
+ WSGIServer(app, bindAddress=str(sock), umask=0o007).run()