mirror of
https://github.com/JoeanAmier/XHS-Downloader.git
synced 2025-12-26 04:48:05 +08:00
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
from source.expansion import Namespace
|
|
|
|
from .request import Html
|
|
|
|
__all__ = ["Image"]
|
|
|
|
|
|
class Image:
|
|
@classmethod
|
|
def get_image_link(cls, data: Namespace, format_: str) -> tuple[list, list]:
|
|
images = data.safe_extract("imageList", [])
|
|
live_link = cls.__get_live_link(images)
|
|
token_list = [
|
|
cls.__extract_image_token(Namespace.object_extract(i, "urlDefault"))
|
|
for i in images
|
|
]
|
|
match format_:
|
|
case "png" | "webp" | "jpeg" | "heic" | "avif":
|
|
return [
|
|
Html.format_url(
|
|
cls.__generate_fixed_link(
|
|
i,
|
|
format_,
|
|
)
|
|
)
|
|
for i in token_list
|
|
], live_link
|
|
case "auto":
|
|
return [
|
|
Html.format_url(cls.__generate_auto_link(i)) for i in token_list
|
|
], live_link
|
|
case _:
|
|
raise ValueError
|
|
|
|
@staticmethod
|
|
def __generate_auto_link(token: str) -> str:
|
|
return f"https://sns-img-bd.xhscdn.com/{token}"
|
|
|
|
@staticmethod
|
|
def __generate_fixed_link(
|
|
token: str,
|
|
format_: str,
|
|
) -> str:
|
|
return f"https://ci.xiaohongshu.com/{token}?imageView2/format/{format_}"
|
|
|
|
@staticmethod
|
|
def __extract_image_token(url: str) -> str:
|
|
return "/".join(url.split("/")[5:]).split("!")[0]
|
|
|
|
@staticmethod
|
|
def __get_live_link(items: list) -> list:
|
|
return [
|
|
(
|
|
Html.format_url(
|
|
Namespace.object_extract(item, "stream.h264[0].masterUrl")
|
|
)
|
|
or None
|
|
)
|
|
for item in items
|
|
]
|