"""python3 -I fetch.py SYMBOL INTERVAL OUT.json.gz : all klines from Binance's public market-data mirror (data-api.binance.vision)."""
import gzip, json, sys, time, urllib.request
sym, iv, out = sys.argv[1:4]; start, rows = 1500000000000, []
while True:
    u = f"https://data-api.binance.vision/api/v3/klines?symbol={sym}&interval={iv}&startTime={start}&limit=1000"
    r = json.load(urllib.request.urlopen(u, timeout=30))
    if not r: break
    rows += [[int(k[0]), float(k[1]), float(k[2]), float(k[3]), float(k[4]), float(k[5])] for k in r]
    start = r[-1][0] + 1
    if len(r) < 1000: break
    time.sleep(0.15)
json.dump(rows, gzip.open(out, "wt")); print(sym, iv, len(rows), time.strftime("%Y-%m-%d", time.gmtime(rows[0][0] / 1000)), time.strftime("%Y-%m-%d %H:%M", time.gmtime(rows[-1][0] / 1000)))
