feat(download): 添加快手下载器并优化下载配置功能

- 新增快手下载器,支持快手视频下载
- 添加下载配置页面,可设置各平台Cookies
- 优化后端接口,增加获取和更新Cookies的功能
- 前端新增Downloader组件和相关表单组件
- 更新路由配置,增加下载配置相关路由
This commit is contained in:
黄建武
2025-05-08 18:15:59 +08:00
parent 321d22271a
commit 21c9d47495
21 changed files with 1106 additions and 413 deletions

View File

@@ -1,24 +1,30 @@
from pydantic import AnyUrl, validator, BaseModel
from pydantic import AnyUrl, validator, BaseModel, field_validator
import re
SUPPORTED_PLATFORMS = {
"bilibili": r"(https?://)?(www\.)?bilibili\.com/video/[a-zA-Z0-9]+",
"youtube": r"(https?://)?(www\.)?(youtube\.com/watch\?v=|youtu\.be/)[\w\-]+",
"douyin": r"'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F])"
"douyin": "douyin",
"kuaishou": "kuaishou"
}
def is_supported_video_url(url: str) -> bool:
return any(re.match(pattern, url) for pattern in SUPPORTED_PLATFORMS.values())
for name, pattern in SUPPORTED_PLATFORMS.items():
if pattern in ["douyin", "kuaishou"]:
if pattern in url:
return True
else:
if re.match(pattern, url):
return True
return False
class VideoRequest(BaseModel):
url: AnyUrl
platform: str
@validator("url")
@field_validator("url")
def validate_video_url(cls, v):
if not is_supported_video_url(str(v)):
raise ValueError("暂不支持该视频平台或链接格式无效")