# Read-only Upstox intraday 1m for 2026-10-26 full session: Nifty index, Nifty fut, VIX, Nifty options exp 2026-10-27 (21800..23400). Token never printed. import sys,json,gzip,pandas as pd,os,time sys.path.insert(0,'/workspace/research/flow-forensics-2026-10/recov/scripts'); from up import get,q B='/workspace/research/flow-forensics-2026-10'; O='/workspace/research/buyer-method-audit/data/today26'; os.makedirs(O,exist_ok=True) keys={k:v for k,v in json.load(open(f'{B}/data/keys.json')).items() if k in('NIFTY','NIFTYFUT','INDIAVIX')} ins=json.load(gzip.open(f'{B}/data/NSE.json.gz')); opt={} for x in ins: if x.get('segment')=='NSE_FO' and x.get('name')=='NIFTY' and x.get('instrument_type') in('CE','PE'): e=pd.to_datetime(x['expiry'],unit='ms').tz_localize('UTC').tz_convert('Asia/Kolkata').strftime('%Y-%m-%d') if isinstance(x['expiry'],(int,float)) else str(x['expiry'])[:10] if e=='2026-10-27' and 21800<=float(x['strike_price'])<=23400: opt[f"OPT_{int(float(x['strike_price']))}{x['instrument_type']}"]=x['instrument_key'] cols=['ts','open','high','low','close','volume','oi']; bad=[] for s,k in list(keys.items())+list(opt.items()): c,j=get(f"/v2/historical-candle/intraday/{q(k,safe='')}/1minute") if c!=200: bad.append((s,c)); continue pd.DataFrame(j['data']['candles'],columns=cols).sort_values('ts').to_csv(f'{O}/{s}.csv',index=False); time.sleep(0.12) print('keys',list(keys),'options',len(opt),'failures',bad)