Files
XHS_Downloader/source/application/video.py
2026-01-07 19:30:36 +08:00

52 lines
1.4 KiB
Python

from source.expansion import Namespace
from .request import Html
__all__ = ["Video"]
class Video:
VIDEO_LINK = (
"video",
"consumer",
"originVideoKey",
)
@classmethod
def deal_video_link(
cls,
data: Namespace,
preference="resolution",
):
return cls.generate_video_link(data) or cls.get_video_link(data, preference)
@classmethod
def generate_video_link(cls, data: Namespace) -> list:
return (
[Html.format_url(f"https://sns-video-bd.xhscdn.com/{t}")]
if (t := data.safe_extract(".".join(cls.VIDEO_LINK)))
else []
)
@classmethod
def get_video_link(
cls,
data: Namespace,
preference="resolution",
) -> list:
if not (items := cls.get_video_items(data)):
return []
match preference:
case "resolution":
items.sort(key=lambda x: x.height)
case "bitrate" | "size":
items.sort(key=lambda x: x.preference)
case _:
raise ValueError(f"Invalid video preference value: {preference}")
return [b[0]] if (b := items[-1].backupUrls) else [items[-1].masterUrl]
@staticmethod
def get_video_items(data: Namespace) -> list:
h264 = data.safe_extract("video.media.stream.h264")
h265 = data.safe_extract("video.media.stream.h265")
return [*h264, *h265]