From 338467aa3009526285bc02eeb34f62d25dcc27b8 Mon Sep 17 00:00:00 2001 From: morrah Date: Fri, 18 Sep 2020 17:39:15 +0300 Subject: [PATCH] [youtube] Liked Music playlist support (closes #25175, closes #14001) --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/youtube.py | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index ae7079a6a..7e9e22038 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -1490,6 +1490,7 @@ from .youtube import ( YoutubeTruncatedURLIE, YoutubeUserIE, YoutubeWatchLaterIE, + YoutubeLikedMusicIE, ) from .zapiks import ZapiksIE from .zaq1 import Zaq1IE diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 02f3ab61a..b37003cd2 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -434,7 +434,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor): (?!.*?\blist= (?: %(playlist_id)s| # combined list/video URLs are handled by the playlist IE - WL # WL are handled by the watch later IE + WL| # WL are handled by the watch later IE + LM # LM are handled by the watch later IE ) ) (?(1).+)? # if we found the ID, everything can follow @@ -3347,6 +3348,27 @@ class YoutubeWatchLaterIE(YoutubePlaylistIE): return playlist +class YoutubeLikedMusicIE(YoutubePlaylistIE): + IE_NAME = 'youtube:likedmusic' + IE_DESC = 'Youtube liked music list, ":ytlikedmusic" for short (requires authentication)' + _VALID_URL = r'https?://(?:www\.)?youtube\.com/((?:playlist|watch)\?(?:.+&)?list=LM)|:ytlikedmusic' + + _TESTS = [{ + 'url': 'https://www.youtube.com/playlist?list=LM', + 'only_matching': True, + }, { + 'url': 'https://www.youtube.com/watch?v=j2DgYtvDW3I&index=1&list=LM', + 'only_matching': True, + }] + + def _real_extract(self, url): + _, video = self._check_download_just_video(url, 'LM') + if video: + return video + _, playlist = self._extract_playlist('LM') + return playlist + + class YoutubeFavouritesIE(YoutubeBaseInfoExtractor): IE_NAME = 'youtube:favorites' IE_DESC = 'YouTube.com favourite videos, ":ytfav" for short (requires authentication)'