Query Arte Player API before each download to determine available stream versions. Select lang tag (VOSTFR > VO, FRENCH if audio is fr). Embed French subtitles as default MKV track when VOSTFR. All output now .mkv. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+29
@@ -278,6 +278,35 @@ async def fetch_concerts(page: int = 1, search: str = "", page_size: int = 24, c
|
||||
}
|
||||
|
||||
|
||||
def get_versions(pid: str) -> list[dict]:
|
||||
"""Fetch available stream versions from Arte Player API for a programme ID."""
|
||||
try:
|
||||
raw = _fetch_url(
|
||||
PLAYER_API.format(pid=pid),
|
||||
headers={"User-Agent": _HEADERS["User-Agent"], "Accept": "application/json"},
|
||||
)
|
||||
data = json.loads(raw)
|
||||
streams = data["data"]["attributes"].get("streams") or []
|
||||
return streams[0].get("versions") or [] if streams else []
|
||||
except Exception as ex:
|
||||
logger.debug("Failed to get versions for %s: %s", pid, ex)
|
||||
return []
|
||||
|
||||
|
||||
def select_lang_tag(versions: list[dict]) -> str:
|
||||
"""
|
||||
Determine UNFR language tag from stream versions.
|
||||
FR audio → FRENCH, non-FR + FR subs → VOSTFR, otherwise → VO.
|
||||
"""
|
||||
if not versions:
|
||||
return "VO"
|
||||
if any(v.get("audioLanguage") == "fr" for v in versions):
|
||||
return "FRENCH"
|
||||
if any(v.get("subtitleLanguage") == "fr" for v in versions):
|
||||
return "VOSTFR"
|
||||
return "VO"
|
||||
|
||||
|
||||
async def invalidate_cache() -> int:
|
||||
_cache["ts"] = 0
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user