import json, urllib.request, time, sys
sys.path.insert(0, '/tmp/run')
rows = json.load(open('/tmp/run/feats3.json'))
need = [r for r in rows if r['kind'] == 'runner' and r.get('peak7') is None and r.get('kl_note') in ('no_kline', 'kline_late')]
UA = {'User-Agent': 'Mozilla/5.0 (Macintosh) Chrome/128', 'Accept': 'application/json'}
def get(u):
    for i in range(5):
        try: return json.loads(urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=30).read())
        except urllib.error.HTTPError as e:
            if e.code == 429: time.sleep(15 + 10 * i); continue
            return None
        except Exception: time.sleep(3)
    return None
out = {}
for r in need:
    t = r['tok']
    p = get('https://api.geckoterminal.com/api/v2/networks/robinhood/tokens/%s/pools?page=1' % t)
    time.sleep(2.2)
    if not p or not p.get('data'): out[t] = None; continue
    pools = [d['attributes']['address'] for d in p['data'][:2]]
    best = []
    for pa in pools[:1]:
        o = get('https://api.geckoterminal.com/api/v2/networks/robinhood/pools/%s/ohlcv/hour?aggregate=1&before_timestamp=%d&limit=220&token=%s' % (pa, int(r['start_ts'] + 8 * 86400), t))
        time.sleep(2.2)
        if o and o.get('data'): best = o['data']['attributes']['ohlcv_list']
    out[t] = best
    print(r.get('sym'), len(best), flush=True)
json.dump(out, open('/tmp/run/gt_early.json', 'w'))
