45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
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
|