diff options
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 22 | 
1 files changed, 15 insertions, 7 deletions
| diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 408c8d52c..e24dd3e5b 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1701,13 +1701,7 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):          return self.playlist_result(self._entries(page, playlist_id), playlist_id, playlist_title) -    def _real_extract(self, url): -        # Extract playlist id -        mobj = re.match(self._VALID_URL, url) -        if mobj is None: -            raise ExtractorError('Invalid URL: %s' % url) -        playlist_id = mobj.group(1) or mobj.group(2) - +    def _check_download_just_video(self, url, playlist_id):          # Check if it's a video-specific URL          query_dict = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query)          if 'v' in query_dict: @@ -1718,6 +1712,17 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):              else:                  self.to_screen('Downloading playlist %s - add --no-playlist to just download video %s' % (playlist_id, video_id)) +    def _real_extract(self, url): +        # Extract playlist id +        mobj = re.match(self._VALID_URL, url) +        if mobj is None: +            raise ExtractorError('Invalid URL: %s' % url) +        playlist_id = mobj.group(1) or mobj.group(2) + +        video = self._check_download_just_video(url, playlist_id) +        if video: +            return video +          if playlist_id.startswith('RD') or playlist_id.startswith('UL'):              # Mixes require a custom extraction process              return self._extract_mix(playlist_id) @@ -2037,6 +2042,9 @@ class YoutubeWatchLaterIE(YoutubePlaylistIE):      }]      def _real_extract(self, url): +        video = self._check_download_just_video(url, 'WL') +        if video: +            return video          return self._extract_playlist('WL') | 
