mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-09-06 08:07:09 +08:00
fix: 规范化含 BV 号的任意 B 站链接(稍后再看/收藏夹/追踪参数)
从"稍后再看"(/list/watchlater/?bvid=BV...)、收藏夹播放页等场景 复制的链接会被判为无效链接,尽管其中包含完整 BV 号;校验通过的 链接也会带着追踪参数原样传给 yt-dlp。 在请求入口新增 normalize_video_url():提取 BV 号重建标准 /video/BVxxx 链接,保留分 P 参数(?p=N),丢弃其余查询参数。 b23.tv 短链与其他平台行为不变,无 BV 号链接仍按原逻辑拒绝。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
6d67e5a76a
commit
b85d7bc1ff
@@ -1,7 +1,9 @@
|
||||
from pydantic import AnyUrl, validator, BaseModel, field_validator
|
||||
from pydantic import AnyUrl, validator, BaseModel, field_validator, model_validator
|
||||
import re
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from app.utils.url_parser import normalize_video_url
|
||||
|
||||
SUPPORTED_PLATFORMS = {
|
||||
"bilibili": r"(https?://)?(www\.)?bilibili\.com/video/[a-zA-Z0-9]+",
|
||||
"youtube": r"(https?://)?(www\.)?(youtube\.com/(watch\?v=|shorts/)|youtu\.be/)[\w\-]+",
|
||||
@@ -31,6 +33,13 @@ class VideoRequest(BaseModel):
|
||||
url: AnyUrl
|
||||
platform: str
|
||||
|
||||
@model_validator(mode="before")
|
||||
@classmethod
|
||||
def normalize_url(cls, data):
|
||||
if isinstance(data, dict) and data.get("platform") == "bilibili" and data.get("url"):
|
||||
data["url"] = normalize_video_url(str(data["url"]))
|
||||
return data
|
||||
|
||||
@field_validator("url")
|
||||
def validate_video_url(cls, v):
|
||||
if not is_supported_video_url(str(v)):
|
||||
|
||||
Reference in New Issue
Block a user