mirror of
https://github.com/JoeanAmier/XHS-Downloader.git
synced 2026-03-22 06:57:16 +08:00
refactor(app): 重构数据处理逻辑
This commit is contained in:
@@ -199,7 +199,7 @@ class XHS:
|
|||||||
container: dict,
|
container: dict,
|
||||||
data: Namespace,
|
data: Namespace,
|
||||||
):
|
):
|
||||||
container["下载地址"] = self.video.get_video_link(
|
container["下载地址"] = self.video.deal_video_link(
|
||||||
data,
|
data,
|
||||||
)
|
)
|
||||||
container["动图地址"] = [
|
container["动图地址"] = [
|
||||||
|
|||||||
@@ -10,10 +10,16 @@ class Image:
|
|||||||
def get_image_link(cls, data: Namespace, format_: str) -> tuple[list, list]:
|
def get_image_link(cls, data: Namespace, format_: str) -> tuple[list, list]:
|
||||||
images = data.safe_extract("imageList", [])
|
images = data.safe_extract("imageList", [])
|
||||||
live_link = cls.__get_live_link(images)
|
live_link = cls.__get_live_link(images)
|
||||||
token_list = [
|
if not any(
|
||||||
cls.__extract_image_token(Namespace.object_extract(i, "urlDefault"))
|
token_list := [
|
||||||
for i in images
|
cls.__extract_image_token(Namespace.object_extract(i, "urlDefault"))
|
||||||
]
|
for i in images
|
||||||
|
]
|
||||||
|
):
|
||||||
|
token_list = [
|
||||||
|
cls.__extract_image_token(Namespace.object_extract(i, "url"))
|
||||||
|
for i in images
|
||||||
|
]
|
||||||
match format_:
|
match format_:
|
||||||
case "png" | "webp" | "jpeg" | "heic" | "avif":
|
case "png" | "webp" | "jpeg" | "heic" | "avif":
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -11,6 +11,14 @@ class Video:
|
|||||||
"originVideoKey",
|
"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
|
@classmethod
|
||||||
def generate_video_link(cls, data: Namespace) -> list:
|
def generate_video_link(cls, data: Namespace) -> list:
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -8,12 +8,17 @@ __all__ = ["Converter"]
|
|||||||
|
|
||||||
class Converter:
|
class Converter:
|
||||||
INITIAL_STATE = "//script/text()"
|
INITIAL_STATE = "//script/text()"
|
||||||
KEYS_LINK = (
|
PC_KEYS_LINK = (
|
||||||
"note",
|
"note",
|
||||||
"noteDetailMap",
|
"noteDetailMap",
|
||||||
"[-1]",
|
"[-1]",
|
||||||
"note",
|
"note",
|
||||||
)
|
)
|
||||||
|
PHONE_KEYS_LINK = (
|
||||||
|
"noteData",
|
||||||
|
"data",
|
||||||
|
"noteData",
|
||||||
|
)
|
||||||
|
|
||||||
def run(self, content: str) -> dict:
|
def run(self, content: str) -> dict:
|
||||||
return self._filter_object(self._convert_object(self._extract_object(content)))
|
return self._filter_object(self._convert_object(self._extract_object(content)))
|
||||||
@@ -31,7 +36,11 @@ class Converter:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _filter_object(cls, data: dict) -> dict:
|
def _filter_object(cls, data: dict) -> dict:
|
||||||
return cls.deep_get(data, cls.KEYS_LINK) or {}
|
return (
|
||||||
|
cls.deep_get(data, cls.PHONE_KEYS_LINK)
|
||||||
|
or cls.deep_get(data, cls.PC_KEYS_LINK)
|
||||||
|
or {}
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def deep_get(cls, data: dict, keys: list | tuple, default=None):
|
def deep_get(cls, data: dict, keys: list | tuple, default=None):
|
||||||
@@ -58,7 +67,11 @@ class Converter:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def get_script(scripts: list) -> str:
|
def get_script(scripts: list) -> str:
|
||||||
scripts.reverse()
|
scripts.reverse()
|
||||||
for script in scripts:
|
return next(
|
||||||
if script.startswith("window.__INITIAL_STATE__"):
|
(
|
||||||
return script
|
script
|
||||||
return ""
|
for script in scripts
|
||||||
|
if script.startswith("window.__INITIAL_STATE__")
|
||||||
|
),
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
3. 新增连接用户脚本下载作品功能
|
3. 新增连接用户脚本下载作品功能
|
||||||
4. 修复视频作品下载功能
|
4. 修复视频作品下载功能
|
||||||
5. 新增作品处理统计功能
|
5. 新增作品处理统计功能
|
||||||
6. 调整内置延时机制
|
6. 重构数据处理逻辑
|
||||||
|
7. 调整内置延时机制
|
||||||
|
|
||||||
*****
|
*****
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user