import requests _geo_cache = {} def city_to_coordinates(city): """Convert a city name to (lat, lon) using Open-Meteo's geocoding API.""" if city in _geo_cache: return _geo_cache[city] url = "https://geocoding-api.open-meteo.com/v1/search" params = { "name": city.strip(), "count": 1, "format": "json" } try: response = requests.get(url, params=params, timeout=10) response.raise_for_status() data = response.json() results = data.get("results") if not results: return None coords = (results[0]["latitude"], results[0]["longitude"]) _geo_cache[city] = coords return coords except (requests.RequestException, ValueError) as e: print(f"city_to_coordinates failed for '{city}': {e}") return None