import os import requests def download_hotosm_data(iso3: str, feature_type: str = "populated_places", geometry: str = "points", save_dir: str = "./downloads"): """ Download HOTOSM data (e.g., populated_places, roads, etc.) as SHP zip. Args: iso3 (str): ISO3 country code (e.g., 'SSD'). feature_type (str): HOTOSM feature type (e.g., 'populated_places', 'roads'). geometry (str): Geometry type ('points', 'lines', 'polygons'). save_dir (str): Directory to save the downloaded file. Returns: str or None: Path to saved file, or None if failed. """ iso3_upper = iso3.upper() iso3_lower = iso3.lower() # Build filename filename = f"hotosm_{iso3_lower}_{feature_type}_{geometry}_shp.zip" url = f"https://s3.dualstack.us-east-1.amazonaws.com/production-raw-data-api/ISO3/{iso3_upper}/{feature_type}/{geometry}/{filename}" local_filename = os.path.join(save_dir, filename) try: response = requests.get(url, stream=True) if response.status_code != 200: print(f"[{iso3_upper}] Failed to download HOTOSM {feature_type}/{geometry}. HTTP {response.status_code}") return None os.makedirs(save_dir, exist_ok=True) with open(local_filename, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) print(f"[{iso3_upper}] Downloaded: {local_filename}") return local_filename except Exception as e: print(f"[{iso3_upper}] Error: {e}") return None