# Free public NSE archives: delivery (sec_bhavdata_full), participant OI/vol, F&O UDiFF bhavcopy, FII derivative stats import sys,os,time,pandas as pd sys.path.insert(0,os.path.dirname(__file__)); from nse import S B='/workspace/research/flow-forensics-2026-10/data/nse' days=pd.bdate_range('2026-09-08','2026-10-23') def save(u,fn): p=f'{B}/{fn}' if os.path.exists(p) and os.path.getsize(p)>500: return 'have' try: r=S.get(u,timeout=25) except Exception as e: return f'ERR {e}' if r.status_code==200 and len(r.content)>500: open(p,'wb').write(r.content); return 'ok' return f'{r.status_code}' for d in days: a=d.strftime('%d%m%Y'); y=d.strftime('%Y%m%d'); x=d.strftime('%d-%b-%Y') res={'deliv':save(f'https://nsearchives.nseindia.com/products/content/sec_bhavdata_full_{a}.csv',f'sec_bhavdata_full_{a}.csv')} if d>=pd.Timestamp('2026-10-01'): res['poi']=save(f'https://nsearchives.nseindia.com/content/nsccl/fao_participant_oi_{a}.csv',f'fao_participant_oi_{a}.csv') res['pvol']=save(f'https://nsearchives.nseindia.com/content/nsccl/fao_participant_vol_{a}.csv',f'fao_participant_vol_{a}.csv') res['fobhav']=save(f'https://nsearchives.nseindia.com/content/fo/BhavCopy_NSE_FO_0_0_0_{y}_F_0000.csv.zip',f'fo_bhav_{y}.csv.zip') res['fiistats']=save(f'https://nsearchives.nseindia.com/content/fo/fii_stats_{x}.xls',f'fii_stats_{y}.xls') print(d.date(),res,flush=True); time.sleep(0.5)