mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-06-21 15:44:07 +08:00
fix(bilibili): 修正分P视频字幕优先链路未传p参数导致取错集
问题:B站分P视频(如62集课程),提交?p=36链接时, 字幕优先链路通过x/web-interface/view API拿cid时未传p参数, 默认取第1集cid,导致生成的是第1集的笔记。 同时yt-dlp正确下载了p36音频,但被跳过。 修复: - url_parser新增extract_bilibili_p_number()提取URL中的p参数 - bilibili_subtitle的_get_cid()接收p参数,从data.pages[p-1]取对应分P的cid - fetch_subtitles()调用extract_bilibili_p_number()透传p
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import re
|
||||
from typing import Optional
|
||||
from typing import Optional, Tuple
|
||||
import requests
|
||||
|
||||
|
||||
@@ -48,3 +48,34 @@ def resolve_bilibili_short_url(short_url: str) -> Optional[str]:
|
||||
except requests.RequestException as e:
|
||||
print(f"Error resolving short URL: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def extract_bilibili_p_number(url: str) -> Optional[int]:
|
||||
"""
|
||||
从 B 站分 P 视频 URL 中提取 p 参数(分 P 序号)。
|
||||
|
||||
支持格式:
|
||||
- https://www.bilibili.com/video/BVxxx/?p=36
|
||||
- https://www.bilibili.com/video/BVxxx?p=5
|
||||
- https://b23.tv/xxxxx?p=10
|
||||
- https://www.bilibili.com/video/BVxxx/pN (尾缀形式)
|
||||
|
||||
:param url: B 站视频链接
|
||||
:return: 分 P 序号(从 1 开始),非分 P 视频返回 None
|
||||
"""
|
||||
if "b23.tv" in url:
|
||||
url = resolve_bilibili_short_url(url) or url
|
||||
|
||||
# 匹配 ?p=NNN 或 &p=NNN
|
||||
match = re.search(r'[?&]p=(\d+)', url)
|
||||
if match:
|
||||
p = int(match.group(1))
|
||||
if p >= 1:
|
||||
return p
|
||||
|
||||
# 匹配 /pN 尾缀形式(较少见)
|
||||
match = re.search(r'/p(\d+)(?:/?$|\?|&)', url)
|
||||
if match:
|
||||
return int(match.group(1))
|
||||
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user