mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[youtube] Improve _VALID_URLs (closes #12538)
This commit is contained in:
		| @@ -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' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․