import os import httpx OMDB_URL = "http://www.omdbapi.com/" def _api_key() -> str | None: return os.getenv("OMDB_API_KEY", "").strip() or None async def fetch_ratings( *, title: str | None = None, year: int | None = None, ) -> dict | None: key = _api_key() if not key or not title: return None params: dict = {"apikey": key, "t": title} if year: params["y"] = str(year) try: async with httpx.AsyncClient(timeout=5.0) as client: response = await client.get(OMDB_URL, params=params) data = response.json() except Exception: return None if data.get("Response") == "False": return None result: dict = {} for rating in data.get("Ratings", []): source = rating.get("Source", "") value = rating.get("Value", "") if source == "Internet Movie Database": result["imdb"] = value elif source == "Rotten Tomatoes": result["rt"] = value elif source == "Metacritic": result["metacritic"] = value if not result.get("imdb"): raw = data.get("imdbRating", "") if raw and raw != "N/A": result["imdb"] = f"{raw}/10" return result or None