mirror of
https://github.com/NanmiCoder/MediaCrawler.git
synced 2026-10-08 16:38:12 +08:00
feat(ks): 支持分享短链 /f/<token> 形式的视频输入
快手分享短链 https://www.kuaishou.com/f/X9Idt15MQb9L2cv 路径里是 share_token 而不是视频 ID,它只做 302 跳转,真实地址在 Location 里。原先的解析器只认 /short-video/<id> 和纯 ID,遇到短链会抛 ValueError 被 continue 掉——只有一行 ERROR 日志,看起来像"爬了但没数据"。 - help.py: 新增 /f/<token> 分支,返回 url_type="short"(token 不是视频 ID, 必须跟随重定向),并补上第三种形式的文档 - client.py: 新增 resolve_short_url,GET 时 follow_redirects=False,读 301/302/303/307/308 的 Location - core.py: url_type == "short" 时先解析短链再解析一次,失败则跳过该条 - 新增 tests/test_kuaishou_url_parse.py(6 条,不发网络请求) 验证:两条真实短链分别解析到 3xyziwesje8e9jg / 3xbbkdxtxqm8sae,详情均成功; 带 query 的标准视频页不会被误判成短链。
This commit is contained in:
@@ -92,6 +92,8 @@ def parse_video_info_from_url(url: str) -> VideoUrlInfo:
|
||||
Supports the following formats:
|
||||
1. Full video URL: "https://www.kuaishou.com/short-video/3x3zxz4mjrsc8ke?authorId=3x84qugg4ch9zhs&streamSource=search"
|
||||
2. Pure video ID: "3x3zxz4mjrsc8ke"
|
||||
3. Share short link: "https://www.kuaishou.com/f/X9Idt15MQb9L2cv"
|
||||
(路径里是 share_token 而非视频 ID,返回 url_type="short",由调用方跟随重定向)
|
||||
|
||||
Args:
|
||||
url: Kuaishou video link or video ID
|
||||
@@ -109,6 +111,14 @@ def parse_video_info_from_url(url: str) -> VideoUrlInfo:
|
||||
video_id = match.group(1)
|
||||
return VideoUrlInfo(video_id=video_id, url_type="normal")
|
||||
|
||||
# 分享短链:https://www.kuaishou.com/f/X9Idt15MQb9L2cv
|
||||
# 路径里的 share_token 不是视频 ID,必须跟随 302 重定向才能拿到真实地址,
|
||||
# 所以这里只标记类型,交给调用方解析(url_type="short")
|
||||
share_pattern = r'kuaishou\.com/f/([a-zA-Z0-9_-]+)'
|
||||
match = re.search(share_pattern, url)
|
||||
if match:
|
||||
return VideoUrlInfo(video_id=match.group(1), url_type="short")
|
||||
|
||||
raise ValueError(f"Unable to parse video ID from URL: {url}")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user