expand_url: watch-ссылка с list= раскрывается в весь плейлист

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-07-14 15:10:17 +05:00
parent e87f6cd215
commit 48cd01d0f9

View File

@@ -18,9 +18,19 @@ _VIDEO_EXTS = {".mp4", ".mkv", ".webm", ".m4a", ".mp3", ".mov", ".opus", ".ogg",
def expand_url(url: str) -> dict: def expand_url(url: str) -> dict:
"""Определяет, видео это или плейлист, и возвращает список элементов. """Определяет, видео это или плейлист, и возвращает список элементов.
Ссылка вида watch?v=…&list=… (видео внутри плейлиста) трактуется как весь
плейлист — именно её люди копируют из адресной строки.
Returns: {"kind": "video"|"playlist", "title": str, Returns: {"kind": "video"|"playlist", "title": str,
"entries": [{"url": str, "title": str}, ...]} "entries": [{"url": str, "title": str}, ...]}
""" """
m = re.search(r"[?&]list=([A-Za-z0-9_\-]+)", url)
if m and "playlist?" not in url:
# RD… и LL/WL — авто-миксы и служебные списки, их не разворачиваем
list_id = m.group(1)
if not list_id.startswith(("RD", "LL", "WL")):
url = f"https://www.youtube.com/playlist?list={list_id}"
opts = { opts = {
"extract_flat": "in_playlist", "extract_flat": "in_playlist",
"quiet": True, "quiet": True,