import asyncio import httpx from pathlib import Path COUNTRIES = [ "ad","ae","af","ag","ai","al","am","ao","aq","ar","as","at","au","aw","ax","az", "ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz", "ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz", "de","dj","dk","dm","do","dz", "ec","ee","eg","eh","er","es","et", "fi","fj","fk","fm","fo","fr", "ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy", "hk","hm","hn","hr","ht","hu", "id","ie","il","im","in","io","iq","ir","is","it", "jm","jo","jp", "ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz", "la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly", "ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz", "na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz", "om", "pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py", "qa", "re","ro","rs","ru","rw", "sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","sv","sx","sy","sz", "tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tr","tt","tv","tw","tz", "ua","ug","um","us","uy","uz", "va","vc","ve","vg","vi","vn","vu", "wf","ws", "ye","yt", "za","zm","zw" ] BASE_URL = "https://www.forex.se/dist/client/default/assets/flags/" SAVE_DIR = Path("./flags") SAVE_DIR.mkdir(exist_ok=True) async def download_flag(client, code): url = f"{BASE_URL}{code}.svg" save_path = SAVE_DIR / f"{code}.svg" try: resp = await client.get(url) if resp.status_code == 200: save_path.write_bytes(resp.content) print(f"[OK] {code}.svg") else: print(f"[MISS] {code}.svg (status: {resp.status_code})") except Exception as e: print(f"[ERR] {code}.svg → {e}") async def main(): async with httpx.AsyncClient(timeout=10) as client: tasks = [download_flag(client, c) for c in COUNTRIES] await asyncio.gather(*tasks) if __name__ == "__main__": asyncio.run(main())