diff options
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 26 | 
2 files changed, 27 insertions, 0 deletions
diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 232bcd89a..947b83683 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -834,6 +834,7 @@ from .youtube import (      YoutubeTruncatedIDIE,      YoutubeTruncatedURLIE,      YoutubeUserIE, +    YoutubeUserPlaylistsIE,      YoutubeWatchLaterIE,  )  from .zapiks import ZapiksIE diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 364ca102a..abc67f07f 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -224,6 +224,17 @@ class YoutubePlaylistBaseInfoExtractor(InfoExtractor):          return zip(ids_in_page, titles_in_page) +class YoutubePlaylistsBaseInfoExtractor(InfoExtractor): +    def _real_extract(self, url): +        playlist_id = self._match_id(url) +        webpage = self._download_webpage(url, playlist_id) +        entries = [ +            self.url_result(compat_urlparse.urljoin(url, playlist), 'YoutubePlaylist') +            for playlist in re.findall(r'href="(/playlist\?list=.+?)"', webpage)] +        title = self._og_search_title(webpage, fatal=False) +        return self.playlist_result(entries, playlist_id, title) + +  class YoutubeIE(YoutubeBaseInfoExtractor):      IE_DESC = 'YouTube.com'      _VALID_URL = r"""(?x)^ @@ -1742,6 +1753,21 @@ class YoutubeUserIE(YoutubeChannelIE):              return super(YoutubeUserIE, cls).suitable(url) +class YoutubeUserPlaylistsIE(YoutubePlaylistsBaseInfoExtractor): +    IE_DESC = 'YouTube.com user playlists' +    _VALID_URL = r'https?://(?:\w+\.)?youtube\.com/user/(?P<id>[^/]+)/playlists' +    IE_NAME = 'youtube:user:playlists' + +    _TEST = { +        'url': 'http://www.youtube.com/user/ThirstForScience/playlists', +        'playlist_mincount': 4, +        'info_dict': { +            'id': 'ThirstForScience', +            'title': 'Thirst for Science', +        }, +    } + +  class YoutubeSearchIE(SearchInfoExtractor, YoutubePlaylistIE):      IE_DESC = 'YouTube.com searches'      # there doesn't appear to be a real limit, for example if you search for  | 
