diff --git a/api/lib/youtube.py b/api/lib/youtube.py index a2f2f2e..07786a9 100644 --- a/api/lib/youtube.py +++ b/api/lib/youtube.py @@ -18,9 +18,19 @@ _VIDEO_EXTS = {".mp4", ".mkv", ".webm", ".m4a", ".mp3", ".mov", ".opus", ".ogg", def expand_url(url: str) -> dict: """Определяет, видео это или плейлист, и возвращает список элементов. + Ссылка вида watch?v=…&list=… (видео внутри плейлиста) трактуется как весь + плейлист — именно её люди копируют из адресной строки. + Returns: {"kind": "video"|"playlist", "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 = { "extract_flat": "in_playlist", "quiet": True,