mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[youtube] Add Invidious list for playlists/channels (#1567)
Authored by: rhendric
This commit is contained in:
		| @@ -259,6 +259,70 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|     # If True it will raise an error if no login info is provided | ||||
|     _LOGIN_REQUIRED = False | ||||
|  | ||||
|     _INVIDIOUS_SITES = ( | ||||
|         # invidious-redirect websites | ||||
|         r'(?:www\.)?redirect\.invidious\.io', | ||||
|         r'(?:(?:www|dev)\.)?invidio\.us', | ||||
|         # Invidious instances taken from https://github.com/iv-org/documentation/blob/master/Invidious-Instances.md | ||||
|         r'(?:www\.)?invidious\.pussthecat\.org', | ||||
|         r'(?:www\.)?invidious\.zee\.li', | ||||
|         r'(?:www\.)?invidious\.ethibox\.fr', | ||||
|         r'(?:www\.)?invidious\.3o7z6yfxhbw7n3za4rss6l434kmv55cgw2vuziwuigpwegswvwzqipyd\.onion', | ||||
|         # youtube-dl invidious instances list | ||||
|         r'(?:(?:www|no)\.)?invidiou\.sh', | ||||
|         r'(?:(?:www|fi)\.)?invidious\.snopyta\.org', | ||||
|         r'(?:www\.)?invidious\.kabi\.tk', | ||||
|         r'(?:www\.)?invidious\.mastodon\.host', | ||||
|         r'(?:www\.)?invidious\.zapashcanon\.fr', | ||||
|         r'(?:www\.)?(?:invidious(?:-us)?|piped)\.kavin\.rocks', | ||||
|         r'(?:www\.)?invidious\.tinfoil-hat\.net', | ||||
|         r'(?:www\.)?invidious\.himiko\.cloud', | ||||
|         r'(?:www\.)?invidious\.reallyancient\.tech', | ||||
|         r'(?:www\.)?invidious\.tube', | ||||
|         r'(?:www\.)?invidiou\.site', | ||||
|         r'(?:www\.)?invidious\.site', | ||||
|         r'(?:www\.)?invidious\.xyz', | ||||
|         r'(?:www\.)?invidious\.nixnet\.xyz', | ||||
|         r'(?:www\.)?invidious\.048596\.xyz', | ||||
|         r'(?:www\.)?invidious\.drycat\.fr', | ||||
|         r'(?:www\.)?inv\.skyn3t\.in', | ||||
|         r'(?:www\.)?tube\.poal\.co', | ||||
|         r'(?:www\.)?tube\.connect\.cafe', | ||||
|         r'(?:www\.)?vid\.wxzm\.sx', | ||||
|         r'(?:www\.)?vid\.mint\.lgbt', | ||||
|         r'(?:www\.)?vid\.puffyan\.us', | ||||
|         r'(?:www\.)?yewtu\.be', | ||||
|         r'(?:www\.)?yt\.elukerio\.org', | ||||
|         r'(?:www\.)?yt\.lelux\.fi', | ||||
|         r'(?:www\.)?invidious\.ggc-project\.de', | ||||
|         r'(?:www\.)?yt\.maisputain\.ovh', | ||||
|         r'(?:www\.)?ytprivate\.com', | ||||
|         r'(?:www\.)?invidious\.13ad\.de', | ||||
|         r'(?:www\.)?invidious\.toot\.koeln', | ||||
|         r'(?:www\.)?invidious\.fdn\.fr', | ||||
|         r'(?:www\.)?watch\.nettohikari\.com', | ||||
|         r'(?:www\.)?invidious\.namazso\.eu', | ||||
|         r'(?:www\.)?invidious\.silkky\.cloud', | ||||
|         r'(?:www\.)?invidious\.exonip\.de', | ||||
|         r'(?:www\.)?invidious\.riverside\.rocks', | ||||
|         r'(?:www\.)?invidious\.blamefran\.net', | ||||
|         r'(?:www\.)?invidious\.moomoo\.de', | ||||
|         r'(?:www\.)?ytb\.trom\.tf', | ||||
|         r'(?:www\.)?yt\.cyberhost\.uk', | ||||
|         r'(?:www\.)?kgg2m7yk5aybusll\.onion', | ||||
|         r'(?:www\.)?qklhadlycap4cnod\.onion', | ||||
|         r'(?:www\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\.onion', | ||||
|         r'(?:www\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\.onion', | ||||
|         r'(?:www\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\.onion', | ||||
|         r'(?:www\.)?invidious\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\.onion', | ||||
|         r'(?:www\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\.b32\.i2p', | ||||
|         r'(?:www\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\.onion', | ||||
|         r'(?:www\.)?w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd\.onion', | ||||
|         r'(?:www\.)?kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad\.onion', | ||||
|         r'(?:www\.)?grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad\.onion', | ||||
|         r'(?:www\.)?hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid\.onion', | ||||
|     ) | ||||
|  | ||||
|     def _login(self): | ||||
|         """ | ||||
|         Attempt to log in to YouTube. | ||||
| @@ -697,69 +761,6 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|  | ||||
| class YoutubeIE(YoutubeBaseInfoExtractor): | ||||
|     IE_DESC = 'YouTube' | ||||
|     _INVIDIOUS_SITES = ( | ||||
|         # invidious-redirect websites | ||||
|         r'(?:www\.)?redirect\.invidious\.io', | ||||
|         r'(?:(?:www|dev)\.)?invidio\.us', | ||||
|         # Invidious instances taken from https://github.com/iv-org/documentation/blob/master/Invidious-Instances.md | ||||
|         r'(?:www\.)?invidious\.pussthecat\.org', | ||||
|         r'(?:www\.)?invidious\.zee\.li', | ||||
|         r'(?:www\.)?invidious\.ethibox\.fr', | ||||
|         r'(?:www\.)?invidious\.3o7z6yfxhbw7n3za4rss6l434kmv55cgw2vuziwuigpwegswvwzqipyd\.onion', | ||||
|         # youtube-dl invidious instances list | ||||
|         r'(?:(?:www|no)\.)?invidiou\.sh', | ||||
|         r'(?:(?:www|fi)\.)?invidious\.snopyta\.org', | ||||
|         r'(?:www\.)?invidious\.kabi\.tk', | ||||
|         r'(?:www\.)?invidious\.mastodon\.host', | ||||
|         r'(?:www\.)?invidious\.zapashcanon\.fr', | ||||
|         r'(?:www\.)?(?:invidious(?:-us)?|piped)\.kavin\.rocks', | ||||
|         r'(?:www\.)?invidious\.tinfoil-hat\.net', | ||||
|         r'(?:www\.)?invidious\.himiko\.cloud', | ||||
|         r'(?:www\.)?invidious\.reallyancient\.tech', | ||||
|         r'(?:www\.)?invidious\.tube', | ||||
|         r'(?:www\.)?invidiou\.site', | ||||
|         r'(?:www\.)?invidious\.site', | ||||
|         r'(?:www\.)?invidious\.xyz', | ||||
|         r'(?:www\.)?invidious\.nixnet\.xyz', | ||||
|         r'(?:www\.)?invidious\.048596\.xyz', | ||||
|         r'(?:www\.)?invidious\.drycat\.fr', | ||||
|         r'(?:www\.)?inv\.skyn3t\.in', | ||||
|         r'(?:www\.)?tube\.poal\.co', | ||||
|         r'(?:www\.)?tube\.connect\.cafe', | ||||
|         r'(?:www\.)?vid\.wxzm\.sx', | ||||
|         r'(?:www\.)?vid\.mint\.lgbt', | ||||
|         r'(?:www\.)?vid\.puffyan\.us', | ||||
|         r'(?:www\.)?yewtu\.be', | ||||
|         r'(?:www\.)?yt\.elukerio\.org', | ||||
|         r'(?:www\.)?yt\.lelux\.fi', | ||||
|         r'(?:www\.)?invidious\.ggc-project\.de', | ||||
|         r'(?:www\.)?yt\.maisputain\.ovh', | ||||
|         r'(?:www\.)?ytprivate\.com', | ||||
|         r'(?:www\.)?invidious\.13ad\.de', | ||||
|         r'(?:www\.)?invidious\.toot\.koeln', | ||||
|         r'(?:www\.)?invidious\.fdn\.fr', | ||||
|         r'(?:www\.)?watch\.nettohikari\.com', | ||||
|         r'(?:www\.)?invidious\.namazso\.eu', | ||||
|         r'(?:www\.)?invidious\.silkky\.cloud', | ||||
|         r'(?:www\.)?invidious\.exonip\.de', | ||||
|         r'(?:www\.)?invidious\.riverside\.rocks', | ||||
|         r'(?:www\.)?invidious\.blamefran\.net', | ||||
|         r'(?:www\.)?invidious\.moomoo\.de', | ||||
|         r'(?:www\.)?ytb\.trom\.tf', | ||||
|         r'(?:www\.)?yt\.cyberhost\.uk', | ||||
|         r'(?:www\.)?kgg2m7yk5aybusll\.onion', | ||||
|         r'(?:www\.)?qklhadlycap4cnod\.onion', | ||||
|         r'(?:www\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\.onion', | ||||
|         r'(?:www\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\.onion', | ||||
|         r'(?:www\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\.onion', | ||||
|         r'(?:www\.)?invidious\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\.onion', | ||||
|         r'(?:www\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\.b32\.i2p', | ||||
|         r'(?:www\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\.onion', | ||||
|         r'(?:www\.)?w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd\.onion', | ||||
|         r'(?:www\.)?kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad\.onion', | ||||
|         r'(?:www\.)?grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad\.onion', | ||||
|         r'(?:www\.)?hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid\.onion', | ||||
|     ) | ||||
|     _VALID_URL = r"""(?x)^ | ||||
|                      ( | ||||
|                          (?:https?://|//)                                    # http(s):// or protocol-independent URL | ||||
| @@ -793,7 +794,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | ||||
|                      (?P<id>[0-9A-Za-z_-]{11})                                # here is it! the YouTube video ID | ||||
|                      (?(1).+)?                                                # if we found the ID, everything can follow | ||||
|                      (?:\#|$)""" % { | ||||
|         'invidious': '|'.join(_INVIDIOUS_SITES), | ||||
|         'invidious': '|'.join(YoutubeBaseInfoExtractor._INVIDIOUS_SITES), | ||||
|     } | ||||
|     _PLAYER_INFO_RE = ( | ||||
|         r'/s/player/(?P<id>[a-zA-Z0-9_-]{8,})/player', | ||||
| @@ -3064,7 +3065,7 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): | ||||
|                         (?:\w+\.)? | ||||
|                         (?: | ||||
|                             youtube(?:kids)?\.com| | ||||
|                             invidio\.us | ||||
|                             %(invidious)s | ||||
|                         )/ | ||||
|                         (?: | ||||
|                             (?P<channel_type>channel|c|user|browse)/| | ||||
| @@ -3072,10 +3073,13 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): | ||||
|                                 feed/|hashtag/| | ||||
|                                 (?:playlist|watch)\?.*?\blist= | ||||
|                             )| | ||||
|                             (?!(?:%s)\b)  # Direct URLs | ||||
|                             (?!(?:%(reserved_names)s)\b)  # Direct URLs | ||||
|                         ) | ||||
|                         (?P<id>[^/?\#&]+) | ||||
|                     ''' % YoutubeBaseInfoExtractor._RESERVED_NAMES | ||||
|                     ''' % { | ||||
|         'reserved_names': YoutubeBaseInfoExtractor._RESERVED_NAMES, | ||||
|         'invidious': '|'.join(YoutubeBaseInfoExtractor._INVIDIOUS_SITES), | ||||
|     } | ||||
|     IE_NAME = 'youtube:tab' | ||||
|  | ||||
|     _TESTS = [{ | ||||
| @@ -4293,12 +4297,15 @@ class YoutubePlaylistIE(InfoExtractor): | ||||
|                         (?: | ||||
|                             (?: | ||||
|                                 youtube(?:kids)?\.com| | ||||
|                                 invidio\.us | ||||
|                                 %(invidious)s | ||||
|                             ) | ||||
|                             /.*?\?.*?\blist= | ||||
|                         )? | ||||
|                         (?P<id>%(playlist_id)s) | ||||
|                      )''' % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE} | ||||
|                      )''' % { | ||||
|         'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE, | ||||
|         'invidious': '|'.join(YoutubeBaseInfoExtractor._INVIDIOUS_SITES), | ||||
|     } | ||||
|     IE_NAME = 'youtube:playlist' | ||||
|     _TESTS = [{ | ||||
|         'note': 'issue #673', | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Ryan Hendrickson
					Ryan Hendrickson