fix(app): 修复 CLI 模式 KeyError 异常

Closes #341
This commit is contained in:
Quan
2026-02-09 19:00:22 +08:00
parent afaf2fb459
commit 27472257a8
5 changed files with 39 additions and 29 deletions

View File

@@ -1,6 +1,6 @@
[project]
name = "XHS-Downloader"
version = "2.7"
version = "2.8"
description = "小红书XiaoHongShu、RedNote链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接;采集小红书作品信息;提取小红书作品下载地址;下载小红书无水印作品文件"
authors = [
{ name = "JoeanAmier", email = "yonglelolu@foxmail.com" },
@@ -111,6 +111,8 @@ docstring-code-line-length = "dynamic"
[dependency-groups]
dev = [
"nuitka>=4.0",
"pycryptodome>=3.23.0",
"pyinstaller>=6.17.0",
"textual-dev>=1.7.0",
]

View File

@@ -31,9 +31,7 @@ __all__ = ["cli"]
def check_value(function):
def inner(ctx: Context, param, value):
if not value:
return
return function(ctx, param, value)
return function(ctx, param, value) if value else None
return inner
@@ -81,8 +79,8 @@ class CLI:
data.pop("browser_cookie")
def __clean_params(self, data: dict) -> dict:
self.__merge_cookie(data)
return {k: v for k, v in data.items() if v}
# self.__merge_cookie(data)
return {k: v for k, v in data.items() if v != None}
@staticmethod
def __format_index(index: str) -> list:

View File

@@ -1,8 +1,8 @@
from pathlib import Path
VERSION_MAJOR = 2
VERSION_MINOR = 7
VERSION_BETA = False
VERSION_MINOR = 8
VERSION_BETA = True
__VERSION__ = f"{VERSION_MAJOR}.{VERSION_MINOR}.{'beta' if VERSION_BETA else 'stable'}"
ROOT = Path(__file__).resolve().parent.parent.parent.joinpath("Volume")
ROOT.mkdir(exist_ok=True)

View File

@@ -1,28 +1,9 @@
**项目更新内容:**
1. 修复 MCP 模式无法下载文件的问题
2. 新增 `script_server` 配置参数
3. 移除 `从浏览器读取 Cookie` 功能
4. 新增连接用户脚本下载作品功能
5. 优化 Cookie 处理逻辑
6. 修复视频作品下载功能
7. 新增视频下载偏好设置
8. 新增作品处理统计功能
9. 重构数据处理逻辑
10. 调整内置延时机制
1. 修复 CLI 模式 KeyError 异常
*****
**用户脚本更新内容:**
**版本号2.3.1**
1. 新增链接提取/图片下载选择模式开关
2. 修复合辑作品链接提取失败的问题
3. 链接提取选择界面添加序号显示
4. 新增推送下载任务至服务器功能
5. 新增图文作品文件下载格式设置
6. 修复视频作品下载功能
7. 优化用户脚本兼容性
8. 新增英语语言支持
9. 重构数据处理逻辑

31
uv.lock generated
View File

@@ -912,6 +912,12 @@ wheels = [
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" },
]
[[package]]
name = "nuitka"
version = "4.0"
source = { registry = "https://mirrors.ustc.edu.cn/pypi/simple" }
sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/e5/d6/477dc84457fc07885f5fd020da4920e8a2787b2c04563ad444ac98f7d3eb/nuitka-4.0.tar.gz", hash = "sha256:0f404f292c3c2cc808d186d05a6d06a4b0aeca93f299cdfd5e33ddbcd19ab560", size = 4410008, upload-time = "2026-02-05T20:52:39.747Z" }
[[package]]
name = "openapi-pydantic"
version = "0.5.1"
@@ -1065,6 +1071,25 @@ wheels = [
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" },
]
[[package]]
name = "pycryptodome"
version = "3.23.0"
source = { registry = "https://mirrors.ustc.edu.cn/pypi/simple" }
sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" }
wheels = [
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954, upload-time = "2025-05-17T17:20:55.027Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534, upload-time = "2025-05-17T17:20:57.279Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853, upload-time = "2025-05-17T17:20:59.322Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465, upload-time = "2025-05-17T17:21:03.83Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414, upload-time = "2025-05-17T17:21:06.72Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484, upload-time = "2025-05-17T17:21:08.535Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636, upload-time = "2025-05-17T17:21:10.393Z" },
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675, upload-time = "2025-05-17T17:21:13.146Z" },
]
[[package]]
name = "pydantic"
version = "2.12.5"
@@ -1616,7 +1641,7 @@ wheels = [
[[package]]
name = "xhs-downloader"
version = "2.7"
version = "2.8"
source = { virtual = "." }
dependencies = [
{ name = "aiofiles" },
@@ -1636,6 +1661,8 @@ dependencies = [
[package.dev-dependencies]
dev = [
{ name = "nuitka" },
{ name = "pycryptodome" },
{ name = "pyinstaller" },
{ name = "textual-dev" },
]
@@ -1659,6 +1686,8 @@ requires-dist = [
[package.metadata.requires-dev]
dev = [
{ name = "nuitka", specifier = ">=4.0" },
{ name = "pycryptodome", specifier = ">=3.23.0" },
{ name = "pyinstaller", specifier = ">=6.17.0" },
{ name = "textual-dev", specifier = ">=1.7.0" },
]