import requests import json import os API_URL = "https://geocoding-api.open-meteo.com/v1/search" CITIES = ["Tel Aviv", "Beersheba", "Jerusalem", "Szeged"] CACHE_FILE = "coordinates_cache.json" def fetch_coordinates(city): params = { "name": city, "count": 1 } response = requests.get(API_URL, params=params) response.raise_for_status() data = response.json() if "results" not in data: raise ValueError(f"No results found for {city}") result = data["results"][0] return { "name": result["name"], "latitude": result["latitude"], "longitude": result["longitude"], "country": result["country"] } def load_cache(): if os.path.exists(CACHE_FILE): with open(CACHE_FILE, "r") as f: return json.load(f) return None def save_cache(data): with open(CACHE_FILE, "w") as f: json.dump(data, f, indent=4) def main(): # Try loading cached data first cached_data = load_cache() if cached_data: print("Loaded from cache:") print(json.dumps(cached_data, indent=4)) return # If no cache, fetch from API print("Fetching from Open-Meteo API...") results = {} for city in CITIES: results[city] = fetch_coordinates(city) save_cache(results) print("Saved to cache:") print(json.dumps(results, indent=4)) if __name__ == "__main__": main()