mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-05-06 20:42:52 +08:00
67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
import re
|
|
|
|
|
|
def prepend_source_link(markdown: str | None, source_url: str) -> str | None:
|
|
"""
|
|
在笔记开头添加来源链接;若首个非空行已包含来源链接,则更新该行并避免重复。
|
|
"""
|
|
if markdown is None:
|
|
return None
|
|
|
|
source = (source_url or "").strip()
|
|
if not source:
|
|
return markdown
|
|
|
|
header = f"> 来源链接:{source}"
|
|
lines = markdown.splitlines()
|
|
first_non_empty_idx = None
|
|
for idx, line in enumerate(lines):
|
|
if line.strip():
|
|
first_non_empty_idx = idx
|
|
break
|
|
|
|
if first_non_empty_idx is not None:
|
|
first_line = lines[first_non_empty_idx].strip()
|
|
if first_line.startswith("> 来源链接:") or first_line.startswith("来源链接:"):
|
|
lines[first_non_empty_idx] = header
|
|
return "\n".join(lines)
|
|
|
|
if markdown.strip():
|
|
return f"{header}\n\n{markdown}"
|
|
return header
|
|
|
|
|
|
def replace_content_markers(markdown: str, video_id: str, platform: str = 'bilibili') -> str:
|
|
"""
|
|
替换 *Content-04:16*、Content-04:16 或 Content-[04:16] 为超链接,跳转到对应平台视频的时间位置
|
|
"""
|
|
# 匹配三种形式:*Content-04:16*、Content-04:16、Content-[04:16]
|
|
pattern = r"(?:\*?)Content-(?:\[(\d{2}):(\d{2})\]|(\d{2}):(\d{2}))"
|
|
|
|
safe_video_id = video_id
|
|
|
|
def replacer(match):
|
|
mm = match.group(1) or match.group(3)
|
|
ss = match.group(2) or match.group(4)
|
|
total_seconds = int(mm) * 60 + int(ss)
|
|
|
|
if platform == 'bilibili':
|
|
video_id = video_id.replace("_p", "?p=")
|
|
url = f"https://www.bilibili.com/video/{video_id}&t={total_seconds}"
|
|
parsed_video_id = safe_video_id.replace("_p", "?p=")
|
|
url = f"https://www.bilibili.com/video/{parsed_video_id}&t={total_seconds}"
|
|
elif platform == 'youtube':
|
|
url = f"https://www.youtube.com/watch?v={video_id}&t={total_seconds}s"
|
|
url = f"https://www.youtube.com/watch?v={safe_video_id}&t={total_seconds}s"
|
|
elif platform == 'douyin':
|
|
url = f"https://www.douyin.com/video/{video_id}"
|
|
url = f"https://www.douyin.com/video/{safe_video_id}"
|
|
return f"[原片 @ {mm}:{ss}]({url})"
|
|
else:
|
|
return f"({mm}:{ss})"
|
|
|
|
return f"[原片 @ {mm}:{ss}]({url})"
|
|
|
|
return re.sub(pattern, replacer, markdown)
|
|
|