mirror of
https://github.com/JoeanAmier/XHS-Downloader.git
synced 2026-03-22 06:57:16 +08:00
feat(app): 增加批量下载账号作品相关代码
This commit is contained in:
@@ -23,6 +23,7 @@ dependencies = [
|
||||
"textual>=6.8.0",
|
||||
"uvicorn>=0.38.0",
|
||||
"websockets>=15.0.1",
|
||||
"xhshow>=0.1.7",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
|
||||
70
source/application/user_posted.py
Normal file
70
source/application/user_posted.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from xhshow import Xhshow
|
||||
from typing import TYPE_CHECKING
|
||||
from ..module import Manager, retry, sleep_time
|
||||
from httpx import get
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..module import Manager
|
||||
|
||||
|
||||
class UserPosted:
|
||||
encipher = Xhshow()
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
manager: "Manager",
|
||||
url: str,
|
||||
params: dict,
|
||||
cookies: str = None,
|
||||
proxy: str = None,
|
||||
):
|
||||
self.url = url
|
||||
self.params = params
|
||||
self.headers = manager.headers.copy()
|
||||
self.update_cookie(cookies)
|
||||
self.cookies = self.headers["cookie"]
|
||||
self.print = manager.print
|
||||
self.retry = manager.retry
|
||||
self.client = manager.request_client
|
||||
self.timeout = manager.timeout
|
||||
self.proxy = proxy
|
||||
|
||||
def update_cookie(self, cookies: str = None) -> None:
|
||||
if cookies:
|
||||
self.headers["cookie"] = cookies
|
||||
|
||||
def run(
|
||||
self,
|
||||
verify=True,
|
||||
): ...
|
||||
|
||||
@retry
|
||||
async def get_data(self):
|
||||
headers = self.get_headers()
|
||||
if self.proxy:
|
||||
response = get(
|
||||
self.url,
|
||||
params=self.params,
|
||||
headers=headers,
|
||||
proxy=self.proxy,
|
||||
follow_redirects=True,
|
||||
verify=False,
|
||||
timeout=self.timeout,
|
||||
)
|
||||
else:
|
||||
response = await self.client.get(
|
||||
self.url,
|
||||
params=self.params,
|
||||
headers=headers,
|
||||
)
|
||||
await sleep_time()
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
|
||||
def get_headers(self):
|
||||
headers = self.encipher.sign_headers_get(
|
||||
uri=self.url,
|
||||
cookies=self.cookies,
|
||||
params=self.params,
|
||||
)
|
||||
return headers | self.headers
|
||||
@@ -15,6 +15,8 @@ class Settings:
|
||||
"folder_name": "Download", # 下载文件夹名称
|
||||
"name_format": "发布时间 作者昵称 作品标题", # 文件命名格式
|
||||
"user_agent": USERAGENT, # 请求头
|
||||
# "a_user_agent": USERAGENT, # 请求头
|
||||
# "b_user_agent": USERAGENT, # 请求头
|
||||
"cookie": "", # Cookie
|
||||
"proxy": None, # 代理设置
|
||||
"timeout": 10, # 超时时间(秒)
|
||||
|
||||
35
uv.lock
generated
35
uv.lock
generated
@@ -1067,6 +1067,25 @@ wheels = [
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" },
|
||||
]
|
||||
|
||||
[[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"
|
||||
@@ -1643,6 +1662,7 @@ dependencies = [
|
||||
{ name = "textual" },
|
||||
{ name = "uvicorn" },
|
||||
{ name = "websockets" },
|
||||
{ name = "xhshow" },
|
||||
]
|
||||
|
||||
[package.dev-dependencies]
|
||||
@@ -1658,7 +1678,7 @@ requires-dist = [
|
||||
{ name = "click", specifier = ">=8.3.1" },
|
||||
{ name = "emoji", specifier = ">=2.15.0" },
|
||||
{ name = "fastapi", specifier = ">=0.124.2" },
|
||||
{ name = "fastmcp", specifier = ">=2.14.0" },
|
||||
{ name = "fastmcp", specifier = ">=2.14.2" },
|
||||
{ name = "httpx", extras = ["socks"], specifier = ">=0.28.1" },
|
||||
{ name = "lxml", specifier = ">=6.0.2" },
|
||||
{ name = "pyperclip", specifier = ">=1.11.0" },
|
||||
@@ -1667,6 +1687,7 @@ requires-dist = [
|
||||
{ name = "textual", specifier = ">=6.8.0" },
|
||||
{ name = "uvicorn", specifier = ">=0.38.0" },
|
||||
{ name = "websockets", specifier = ">=15.0.1" },
|
||||
{ name = "xhshow", specifier = ">=0.1.7" },
|
||||
]
|
||||
|
||||
[package.metadata.requires-dev]
|
||||
@@ -1675,6 +1696,18 @@ dev = [
|
||||
{ name = "textual-dev", specifier = ">=1.7.0" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xhshow"
|
||||
version = "0.1.7"
|
||||
source = { registry = "https://mirrors.ustc.edu.cn/pypi/simple" }
|
||||
dependencies = [
|
||||
{ name = "pycryptodome" },
|
||||
]
|
||||
sdist = { url = "https://mirrors.ustc.edu.cn/pypi/packages/13/ee/ff0ed107df425b362432b7667aee6881f53cd36d494c9d54a3596d291b86/xhshow-0.1.7.tar.gz", hash = "sha256:2cb395dced80821acab240f8f4330a49d3cbba2b116d99f332c9b9a0349a5dee", size = 44962, upload-time = "2026-01-13T10:12:00.921Z" }
|
||||
wheels = [
|
||||
{ url = "https://mirrors.ustc.edu.cn/pypi/packages/a5/8c/a15c37cccc6d03ddf4df9f0a3942e6afd70cff4e3bb340440ef04178e51a/xhshow-0.1.7-py3-none-any.whl", hash = "sha256:b6db008aad28b71733349a4859a621e5dbc22a529d3464aa6c570f9c0b0071a7", size = 28515, upload-time = "2026-01-13T10:11:59.487Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yarl"
|
||||
version = "1.22.0"
|
||||
|
||||
Reference in New Issue
Block a user