adding start.sh
This commit is contained in:
@@ -1,105 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
from datetime import date
|
||||
|
||||
TMDB_API_BASE = "https://api.themoviedb.org/3"
|
||||
|
||||
|
||||
def parse_release_date(value: str) -> date | None:
|
||||
text = (value or "").strip()
|
||||
if not text:
|
||||
return None
|
||||
try:
|
||||
return date.fromisoformat(text[:10])
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
|
||||
def tmdb_get_json(path: str, params: dict, token: str) -> dict:
|
||||
url = TMDB_API_BASE + path
|
||||
if params:
|
||||
url += "?" + urllib.parse.urlencode(params)
|
||||
|
||||
req = urllib.request.Request(
|
||||
url,
|
||||
headers={
|
||||
"Accept": "application/json",
|
||||
"Authorization": f"Bearer {token}",
|
||||
"User-Agent": "anime-movies-script/1.0",
|
||||
},
|
||||
)
|
||||
|
||||
with urllib.request.urlopen(req, timeout=20) as resp:
|
||||
return json.loads(resp.read().decode("utf-8"))
|
||||
|
||||
|
||||
def search_tmdb_movies(title: str, token: str, language: str = "en-US") -> list[dict]:
|
||||
query = (title or "").strip()
|
||||
if not query:
|
||||
return []
|
||||
|
||||
payload = tmdb_get_json(
|
||||
"/search/movie",
|
||||
{
|
||||
"query": query,
|
||||
"include_adult": "false",
|
||||
"language": language,
|
||||
"page": "1",
|
||||
},
|
||||
token,
|
||||
)
|
||||
|
||||
results = []
|
||||
for item in payload.get("results", []):
|
||||
movie_id = item.get("id")
|
||||
if not movie_id:
|
||||
continue
|
||||
|
||||
results.append(
|
||||
{
|
||||
"tmdb_id": int(movie_id),
|
||||
"title": (item.get("title") or "").strip(),
|
||||
"original_title": (item.get("original_title") or "").strip(),
|
||||
"release_date": parse_release_date(str(item.get("release_date") or "")),
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
def fetch_tmdb_release_dates(movie_id: int, token: str) -> dict:
|
||||
return tmdb_get_json(f"/movie/{movie_id}/release_dates", {}, token)
|
||||
|
||||
|
||||
def extract_de_theatrical_dates(release_payload: dict) -> list[date]:
|
||||
german_block = None
|
||||
for result in release_payload.get("results", []):
|
||||
if str(result.get("iso_3166_1") or "").upper() == "DE":
|
||||
german_block = result
|
||||
break
|
||||
|
||||
if not german_block:
|
||||
return []
|
||||
|
||||
dates = []
|
||||
for entry in german_block.get("release_dates", []):
|
||||
release_type = int(entry.get("type") or 0)
|
||||
if release_type not in {2, 3}:
|
||||
continue
|
||||
|
||||
release_date = parse_release_date(str(entry.get("release_date") or ""))
|
||||
if release_date:
|
||||
dates.append(release_date)
|
||||
|
||||
return sorted(dates)
|
||||
|
||||
|
||||
def select_release_in_range(release_dates: list[date], start_date: date, end_date: date) -> date | None:
|
||||
for release_date in sorted(release_dates):
|
||||
if start_date <= release_date <= end_date:
|
||||
return release_date
|
||||
return None
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
from datetime import date
|
||||
|
||||
TMDB_API_BASE = "https://api.themoviedb.org/3"
|
||||
|
||||
|
||||
def parse_release_date(value: str) -> date | None:
|
||||
text = (value or "").strip()
|
||||
if not text:
|
||||
return None
|
||||
try:
|
||||
return date.fromisoformat(text[:10])
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
|
||||
def tmdb_get_json(path: str, params: dict, token: str) -> dict:
|
||||
url = TMDB_API_BASE + path
|
||||
if params:
|
||||
url += "?" + urllib.parse.urlencode(params)
|
||||
|
||||
req = urllib.request.Request(
|
||||
url,
|
||||
headers={
|
||||
"Accept": "application/json",
|
||||
"Authorization": f"Bearer {token}",
|
||||
"User-Agent": "anime-movies-script/1.0",
|
||||
},
|
||||
)
|
||||
|
||||
with urllib.request.urlopen(req, timeout=20) as resp:
|
||||
return json.loads(resp.read().decode("utf-8"))
|
||||
|
||||
|
||||
def search_tmdb_movies(title: str, token: str, language: str = "en-US") -> list[dict]:
|
||||
query = (title or "").strip()
|
||||
if not query:
|
||||
return []
|
||||
|
||||
payload = tmdb_get_json(
|
||||
"/search/movie",
|
||||
{
|
||||
"query": query,
|
||||
"include_adult": "false",
|
||||
"language": language,
|
||||
"page": "1",
|
||||
},
|
||||
token,
|
||||
)
|
||||
|
||||
results = []
|
||||
for item in payload.get("results", []):
|
||||
movie_id = item.get("id")
|
||||
if not movie_id:
|
||||
continue
|
||||
|
||||
results.append(
|
||||
{
|
||||
"tmdb_id": int(movie_id),
|
||||
"title": (item.get("title") or "").strip(),
|
||||
"original_title": (item.get("original_title") or "").strip(),
|
||||
"release_date": parse_release_date(str(item.get("release_date") or "")),
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
def fetch_tmdb_release_dates(movie_id: int, token: str) -> dict:
|
||||
return tmdb_get_json(f"/movie/{movie_id}/release_dates", {}, token)
|
||||
|
||||
|
||||
def extract_de_theatrical_dates(release_payload: dict) -> list[date]:
|
||||
german_block = None
|
||||
for result in release_payload.get("results", []):
|
||||
if str(result.get("iso_3166_1") or "").upper() == "DE":
|
||||
german_block = result
|
||||
break
|
||||
|
||||
if not german_block:
|
||||
return []
|
||||
|
||||
dates = []
|
||||
for entry in german_block.get("release_dates", []):
|
||||
release_type = int(entry.get("type") or 0)
|
||||
if release_type not in {2, 3}:
|
||||
continue
|
||||
|
||||
release_date = parse_release_date(str(entry.get("release_date") or ""))
|
||||
if release_date:
|
||||
dates.append(release_date)
|
||||
|
||||
return sorted(dates)
|
||||
|
||||
|
||||
def select_release_in_range(release_dates: list[date], start_date: date, end_date: date) -> date | None:
|
||||
for release_date in sorted(release_dates):
|
||||
if start_date <= release_date <= end_date:
|
||||
return release_date
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user