Prepare RTLPlus for new streaming prov

This commit is contained in:
Nirvana
2026-05-03 22:01:29 +02:00
parent 639f137ecc
commit dbc380f0f5
2 changed files with 17 additions and 13 deletions
@@ -70,6 +70,7 @@ class RTLPlusDefaults:
# Image CDN
IMAGE_BASE_URL = "https://images-fio.rtlde.bedrock.tech/v2/images"
IMAGE_PARAMS = "auto=webp&blur=0&fit=scale_crop&height=320&interlace=1&optimize=high&width=213"
IMAGE_SIGNING_KEY = "x9vGg4RNeNBqV2nBfhqLV6cN4n"
# Anonymous credentials (fallback)
ANONYMOUS_CLIENT_ID = "anonymous-user"
@@ -797,14 +797,19 @@ class RTLPlusVodManager:
# Thumbnail / duration helpers (pure, no I/O)
# ------------------------------------------------------------------
@classmethod
def _build_image_url(cls, image_id: str, image_hash: str = None) -> str:
"""Build a Bedrock CDN image URL, appending the hash when available."""
@staticmethod
def _build_image_url(image_id: str) -> str:
"""Build a signed Bedrock CDN image URL.
Hash formula: SHA1("/v2/images/{id}/raw?{params}" + signing_key)
"""
import hashlib
from .constants import RTLPlusDefaults
url = f"{RTLPlusDefaults.IMAGE_BASE_URL}/{image_id}/raw?{RTLPlusDefaults.IMAGE_PARAMS}"
if image_hash:
url += f"&hash={image_hash}"
return url
path_and_query = f"/v2/images/{image_id}/raw?{RTLPlusDefaults.IMAGE_PARAMS}"
image_hash = hashlib.sha1(
(path_and_query + RTLPlusDefaults.IMAGE_SIGNING_KEY).encode()
).hexdigest()
return f"{RTLPlusDefaults.IMAGE_BASE_URL}{path_and_query}&hash={image_hash}"
@classmethod
def _extract_thumbnail(cls, item_content: Dict) -> Optional[str]:
@@ -814,19 +819,17 @@ class RTLPlusVodManager:
for ratio in ("16:9", "3:1", "1:1", "2:3"):
image_id = image.get("idsByRatio", {}).get(ratio)
if image_id:
image_hash = image.get("hashesByRatio", {}).get(ratio) or image.get("hash")
return cls._build_image_url(image_id, image_hash)
return cls._build_image_url(image_id)
image_id = image.get("id")
if image_id:
return cls._build_image_url(image_id, image.get("hash"))
return cls._build_image_url(image_id)
return None
@classmethod
def _extract_thumbnail_from_layout(cls, layout: Dict) -> Optional[str]:
image = layout.get("seo", {}).get("image", {})
image_id = image.get("id")
image_id = layout.get("seo", {}).get("image", {}).get("id")
if image_id:
return cls._build_image_url(image_id, image.get("hash"))
return cls._build_image_url(image_id)
return None
@staticmethod