diff options
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 19 | 
1 files changed, 15 insertions, 4 deletions
| diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index caa048249..ca40de522 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -59,6 +59,8 @@ class YoutubeBaseInfoExtractor(InfoExtractor):      # If True it will raise an error if no login info is provided      _LOGIN_REQUIRED = False +    _PLAYLIST_ID_RE = r'(?:PL|LL|EC|UU|FL|RD|UL|TL)[0-9A-Za-z-_]{10,}' +      def _set_language(self):          self._set_cookie(              '.youtube.com', 'PREF', 'f1=50000000&hl=en', @@ -265,9 +267,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor):                           )                       )?                                                       # all until now is optional -> you can pass the naked ID                       ([0-9A-Za-z_-]{11})                                      # here is it! the YouTube video ID -                     (?!.*?\blist=)                                            # combined list/video URLs are handled by the playlist IE +                     (?!.*?\blist= +                        (?: +                            %(playlist_id)s|                                  # combined list/video URLs are handled by the playlist IE +                            WL                                                # WL are handled by the watch later IE +                        ) +                     )                       (?(1).+)?                                                # if we found the ID, everything can follow -                     $""" +                     $""" % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE}      _NEXT_URL_RE = r'[\?&]next_url=([^&]+)'      _formats = {          '5': {'ext': 'flv', 'width': 400, 'height': 240, 'acodec': 'mp3', 'abr': 64, 'vcodec': 'h263'}, @@ -924,6 +931,10 @@ class YoutubeIE(YoutubeBaseInfoExtractor):              'url': 'sJL6WA-aGkQ',              'only_matching': True,          }, +        { +            'url': 'https://www.youtube.com/watch?v=MuAGGZNfUkU&list=RDMM', +            'only_matching': True, +        },      ]      def __init__(self, *args, **kwargs): @@ -1864,8 +1875,8 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):                          )                          .*                       | -                        ((?:PL|LL|EC|UU|FL|RD|UL|TL)[0-9A-Za-z-_]{10,}) -                     )""" +                        (%(playlist_id)s) +                     )""" % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE}      _TEMPLATE_URL = 'https://www.youtube.com/playlist?list=%s&disable_polymer=true'      _VIDEO_RE = r'href="\s*/watch\?v=(?P<id>[0-9A-Za-z_-]{11})&[^"]*?index=(?P<index>\d+)(?:[^>]+>(?P<title>[^<]+))?'      IE_NAME = 'youtube:playlist' | 
