import json import os import re import urllib.parse import urllib.request from jsonfile import PROJECT_ROOT IMDB_ID_PATTERN = re.compile(r"tt\d{7,9}") ENV_FILE = PROJECT_ROOT / ".env" def imdb_id(text: str) -> str | None: match = IMDB_ID_PATTERN.search(text) return match.group(0) if match else None def title_url(identifier: str) -> str: return f"https://www.imdb.com/title/{identifier}/" def omdb_api_key() -> str | None: if os.environ.get("OMDB_API_KEY"): return os.environ["OMDB_API_KEY"] if not ENV_FILE.exists(): return None for line in ENV_FILE.read_text(encoding="utf-8").splitlines(): key, _, value = line.partition("=") if key.strip() == "OMDB_API_KEY" and value.strip(): return value.strip().strip("\"'") return None def lookup(identifier: str) -> dict | None: api_key = omdb_api_key() if not api_key: return None query = urllib.parse.urlencode({"apikey": api_key, "i": identifier}) try: with urllib.request.urlopen(f"https://www.omdbapi.com/?{query}", timeout=10) as response: result = json.load(response) except (OSError, ValueError): return None return result if result.get("Response") == "True" else None