mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[ie/mtv] Overhaul extractors (#14052)
Adds SouthParkComBrIE and SouthParkCoUkIE Removes these extractors: - CMTIE: migrated to Paramount+ - ComedyCentralTVIE: migrated to Paramount+ - MTVDEIE: migrated to Paramount+ - MTVItaliaIE: migrated to Paramount+ - MTVItaliaProgrammaIE: migrated to Paramount+ - MTVJapanIE: migrated to JP Services - MTVServicesEmbeddedIE: dead domain - MTVVideoIE: migrated to Paramount+ - NickBrIE: redirects to landing page w/o any videos - NickDeIE: redirects to landing page w/o any videos - NickRuIE: redirects to landing page w/o any videos - BellatorIE: migrated to PFL - ParamountNetworkIE: migrated to Paramount+ - SouthParkNlIE: site no longer exists - TVLandIE: migrated to Paramount+ Closes #169, Closes #1711, Closes #1712, Closes #2621, Closes #3167, Closes #3893, Closes #4552, Closes #4702, Closes #4928, Closes #5249, Closes #6156, Closes #8722, Closes #9896, Closes #10168, Closes #12765, Closes #13446, Closes #14009 Authored by: bashonly, doe1080, Randalix, seproDev Co-authored-by: doe1080 <98906116+doe1080@users.noreply.github.com> Co-authored-by: Randalix <23729538+Randalix@users.noreply.github.com> Co-authored-by: sepro <sepro@sepr0.com>
This commit is contained in:
		| @@ -1,224 +1,48 @@ | ||||
| from .mtv import MTVServicesInfoExtractor | ||||
| from ..utils import update_url_query | ||||
| from .mtv import MTVServicesBaseIE | ||||
| 
 | ||||
| 
 | ||||
| class NickIE(MTVServicesInfoExtractor): | ||||
| class NickIE(MTVServicesBaseIE): | ||||
|     IE_NAME = 'nick.com' | ||||
|     _VALID_URL = r'https?://(?P<domain>(?:www\.)?nick(?:jr)?\.com)/(?:[^/]+/)?(?P<type>videos/clip|[^/]+/videos|episodes/[^/]+)/(?P<id>[^/?#.]+)' | ||||
|     _FEED_URL = 'http://udat.mtvnservices.com/service1/dispatch.htm' | ||||
|     _GEO_COUNTRIES = ['US'] | ||||
|     _VALID_URL = r'https?://(?:www\.)?nick\.com/(?:video-clips|episodes)/(?P<id>[\da-z]{6})' | ||||
|     _TESTS = [{ | ||||
|         'url': 'https://www.nick.com/episodes/sq47rw/spongebob-squarepants-a-place-for-pets-lockdown-for-love-season-13-ep-1', | ||||
|         'url': 'https://www.nick.com/episodes/u3smw8/wylde-pak-best-summer-ever-season-1-ep-1', | ||||
|         'info_dict': { | ||||
|             'description': 'md5:0650a9eb88955609d5c1d1c79292e234', | ||||
|             'title': 'A Place for Pets/Lockdown for Love', | ||||
|         }, | ||||
|         'playlist': [ | ||||
|             { | ||||
|                 'md5': 'cb8a2afeafb7ae154aca5a64815ec9d6', | ||||
|                 'info_dict': { | ||||
|                     'id': '85ee8177-d6ce-48f8-9eee-a65364f8a6df', | ||||
|                     'ext': 'mp4', | ||||
|                     'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S1', | ||||
|                     'description': 'A Place for Pets/Lockdown for Love: When customers bring pets into the Krusty Krab, Mr. Krabs realizes pets are more profitable than owners. Plankton ruins another date with Karen, so she puts the Chum Bucket on lockdown until he proves his affection.', | ||||
| 
 | ||||
|                 }, | ||||
|             }, | ||||
|             { | ||||
|                 'md5': '839a04f49900a1fcbf517020d94e0737', | ||||
|                 'info_dict': { | ||||
|                     'id': '2e2a9960-8fd4-411d-868b-28eb1beb7fae', | ||||
|                     'ext': 'mp4', | ||||
|                     'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S2', | ||||
|                     'description': 'A Place for Pets/Lockdown for Love: When customers bring pets into the Krusty Krab, Mr. Krabs realizes pets are more profitable than owners. Plankton ruins another date with Karen, so she puts the Chum Bucket on lockdown until he proves his affection.', | ||||
| 
 | ||||
|                 }, | ||||
|             }, | ||||
|             { | ||||
|                 'md5': 'f1145699f199770e2919ee8646955d46', | ||||
|                 'info_dict': { | ||||
|                     'id': 'dc91c304-6876-40f7-84a6-7aece7baa9d0', | ||||
|                     'ext': 'mp4', | ||||
|                     'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S3', | ||||
|                     'description': 'A Place for Pets/Lockdown for Love: When customers bring pets into the Krusty Krab, Mr. Krabs realizes pets are more profitable than owners. Plankton ruins another date with Karen, so she puts the Chum Bucket on lockdown until he proves his affection.', | ||||
| 
 | ||||
|                 }, | ||||
|             }, | ||||
|             { | ||||
|                 'md5': 'd463116875aee2585ee58de3b12caebd', | ||||
|                 'info_dict': { | ||||
|                     'id': '5d929486-cf4c-42a1-889a-6e0d183a101a', | ||||
|                     'ext': 'mp4', | ||||
|                     'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S4', | ||||
|                     'description': 'A Place for Pets/Lockdown for Love: When customers bring pets into the Krusty Krab, Mr. Krabs realizes pets are more profitable than owners. Plankton ruins another date with Karen, so she puts the Chum Bucket on lockdown until he proves his affection.', | ||||
| 
 | ||||
|                 }, | ||||
|             }, | ||||
|         ], | ||||
|     }, { | ||||
|         'url': 'http://www.nickjr.com/blues-clues-and-you/videos/blues-clues-and-you-original-209-imagination-station/', | ||||
|         'info_dict': { | ||||
|             'id': '31631529-2fc5-430b-b2ef-6a74b4609abd', | ||||
|             'id': 'eb9d4db0-274a-11ef-a913-0e37995d42c9', | ||||
|             'ext': 'mp4', | ||||
|             'description': 'md5:9d65a66df38e02254852794b2809d1cf', | ||||
|             'title': 'Blue\'s Imagination Station', | ||||
|             'display_id': 'u3smw8', | ||||
|             'title': 'Best Summer Ever?', | ||||
|             'description': 'md5:c737a0ade3fbc09d569c3b3d029a7792', | ||||
|             'channel': 'Nickelodeon', | ||||
|             'duration': 1296.0, | ||||
|             'thumbnail': r're:https://assets\.nick\.com/uri/mgid:arc:imageassetref:', | ||||
|             'series': 'Wylde Pak', | ||||
|             'season': 'Season 1', | ||||
|             'season_number': 1, | ||||
|             'episode': 'Episode 1', | ||||
|             'episode_number': 1, | ||||
|             'timestamp': 1746100800, | ||||
|             'upload_date': '20250501', | ||||
|             'release_timestamp': 1746100800, | ||||
|             'release_date': '20250501', | ||||
|         }, | ||||
|         'skip': 'Not accessible?', | ||||
|         'params': {'skip_download': 'm3u8'}, | ||||
|     }, { | ||||
|         'url': 'https://www.nick.com/video-clips/0p4706/spongebob-squarepants-spongebob-loving-the-krusty-krab-for-7-minutes', | ||||
|         'info_dict': { | ||||
|             'id': '4aac2228-5295-4076-b986-159513cf4ce4', | ||||
|             'ext': 'mp4', | ||||
|             'display_id': '0p4706', | ||||
|             'title': 'SpongeBob Loving the Krusty Krab for 7 Minutes!', | ||||
|             'description': 'md5:72bf59babdf4e6d642187502864e111d', | ||||
|             'duration': 423.423, | ||||
|             'thumbnail': r're:https://assets\.nick\.com/uri/mgid:arc:imageassetref:', | ||||
|             'series': 'SpongeBob SquarePants', | ||||
|             'season': 'Season 0', | ||||
|             'season_number': 0, | ||||
|             'episode': 'Episode 0', | ||||
|             'episode_number': 0, | ||||
|             'timestamp': 1663819200, | ||||
|             'upload_date': '20220922', | ||||
|         }, | ||||
|         'params': {'skip_download': 'm3u8'}, | ||||
|     }] | ||||
| 
 | ||||
|     def _get_feed_query(self, uri): | ||||
|         return { | ||||
|             'feed': 'nick_arc_player_prime', | ||||
|             'mgid': uri, | ||||
|         } | ||||
| 
 | ||||
|     def _real_extract(self, url): | ||||
|         domain, video_type, display_id = self._match_valid_url(url).groups() | ||||
|         if video_type.startswith('episodes'): | ||||
|             return super()._real_extract(url) | ||||
|         video_data = self._download_json( | ||||
|             f'http://{domain}/data/video.endLevel.json', | ||||
|             display_id, query={ | ||||
|                 'urlKey': display_id, | ||||
|             }) | ||||
|         return self._get_videos_info(video_data['player'] + video_data['id']) | ||||
| 
 | ||||
| 
 | ||||
| class NickBrIE(MTVServicesInfoExtractor): | ||||
|     IE_NAME = 'nickelodeon:br' | ||||
|     _VALID_URL = r'''(?x) | ||||
|                     https?:// | ||||
|                         (?: | ||||
|                             (?P<domain>(?:www\.)?nickjr|mundonick\.uol)\.com\.br| | ||||
|                             (?:www\.)?nickjr\.[a-z]{2}| | ||||
|                             (?:www\.)?nickelodeonjunior\.fr | ||||
|                         ) | ||||
|                         /(?:programas/)?[^/]+/videos/(?:episodios/)?(?P<id>[^/?\#.]+) | ||||
|                     ''' | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://www.nickjr.com.br/patrulha-canina/videos/210-labirinto-de-pipoca/', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://mundonick.uol.com.br/programas/the-loud-house/videos/muitas-irmas/7ljo9j', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickjr.nl/paw-patrol/videos/311-ge-wol-dig-om-terug-te-zijn/', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickjr.de/blaze-und-die-monster-maschinen/videos/f6caaf8f-e4e8-4cc1-b489-9380d6dcd059/', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeonjunior.fr/paw-patrol-la-pat-patrouille/videos/episode-401-entier-paw-patrol/', | ||||
|         'only_matching': True, | ||||
|     }] | ||||
| 
 | ||||
|     def _real_extract(self, url): | ||||
|         domain, display_id = self._match_valid_url(url).groups() | ||||
|         webpage = self._download_webpage(url, display_id) | ||||
|         uri = self._search_regex( | ||||
|             r'data-(?:contenturi|mgid)="([^"]+)', webpage, 'mgid') | ||||
|         video_id = self._id_from_uri(uri) | ||||
|         config = self._download_json( | ||||
|             'http://media.mtvnservices.com/pmt/e1/access/index.html', | ||||
|             video_id, query={ | ||||
|                 'uri': uri, | ||||
|                 'configtype': 'edge', | ||||
|             }, headers={ | ||||
|                 'Referer': url, | ||||
|             }) | ||||
|         info_url = self._remove_template_parameter(config['feedWithQueryParams']) | ||||
|         if info_url == 'None': | ||||
|             if domain.startswith('www.'): | ||||
|                 domain = domain[4:] | ||||
|             content_domain = { | ||||
|                 'mundonick.uol': 'mundonick.com.br', | ||||
|                 'nickjr': 'br.nickelodeonjunior.tv', | ||||
|             }[domain] | ||||
|             query = { | ||||
|                 'mgid': uri, | ||||
|                 'imageEp': content_domain, | ||||
|                 'arcEp': content_domain, | ||||
|             } | ||||
|             if domain == 'nickjr.com.br': | ||||
|                 query['ep'] = 'c4b16088' | ||||
|             info_url = update_url_query( | ||||
|                 'http://feeds.mtvnservices.com/od/feed/intl-mrss-player-feed', query) | ||||
|         return self._get_videos_info_from_url(info_url, video_id) | ||||
| 
 | ||||
| 
 | ||||
| class NickDeIE(MTVServicesInfoExtractor): | ||||
|     IE_NAME = 'nick.de' | ||||
|     _VALID_URL = r'https?://(?:www\.)?(?P<host>nick\.(?:de|com\.pl|ch)|nickelodeon\.(?:nl|be|at|dk|no|se))/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)' | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://www.nick.de/playlist/3773-top-videos/videos/episode/17306-zu-wasser-und-zu-land-rauchende-erdnusse', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nick.de/shows/342-icarly', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.nl/shows/474-spongebob/videos/17403-een-kijkje-in-de-keuken-met-sandy-van-binnenuit', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.at/playlist/3773-top-videos/videos/episode/77993-das-letzte-gefecht', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nick.com.pl/seriale/474-spongebob-kanciastoporty/wideo/17412-teatr-to-jest-to-rodeo-oszolom', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.no/program/2626-bulderhuset/videoer/90947-femteklasse-veronica-vs-vanzilla', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.dk/serier/2626-hojs-hus/videoer/761-tissepause', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.se/serier/2626-lugn-i-stormen/videos/998-', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nick.ch/shows/2304-adventure-time-abenteuerzeit-mit-finn-und-jake', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.be/afspeellijst/4530-top-videos/videos/episode/73917-inval-broodschapper-lariekoek-arie', | ||||
|         'only_matching': True, | ||||
|     }] | ||||
| 
 | ||||
|     def _get_feed_url(self, uri, url=None): | ||||
|         video_id = self._id_from_uri(uri) | ||||
|         config = self._download_json( | ||||
|             f'http://media.mtvnservices.com/pmt/e1/access/index.html?uri={uri}&configtype=edge&ref={url}', video_id) | ||||
|         return self._remove_template_parameter(config['feedWithQueryParams']) | ||||
| 
 | ||||
| 
 | ||||
| class NickRuIE(MTVServicesInfoExtractor): | ||||
|     IE_NAME = 'nickelodeonru' | ||||
|     _VALID_URL = r'https?://(?:www\.)nickelodeon\.(?:ru|fr|es|pt|ro|hu|com\.tr)/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)' | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://www.nickelodeon.ru/shows/henrydanger/videos/episodes/3-sezon-15-seriya-licenziya-na-polyot/pmomfb#playlist/7airc6', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.ru/videos/smotri-na-nickelodeon-v-iyule/g9hvh7', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.fr/programmes/bob-l-eponge/videos/le-marathon-de-booh-kini-bottom-mardi-31-octobre/nfn7z0', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.es/videos/nickelodeon-consejos-tortitas/f7w7xy', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.pt/series/spongebob-squarepants/videos/a-bolha-de-tinta-gigante/xutq1b', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.ro/emisiuni/shimmer-si-shine/video/nahal-din-bomboane/uw5u2k', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.hu/musorok/spongyabob-kockanadrag/videok/episodes/buborekfujas-az-elszakadt-nadrag/q57iob#playlist/k6te4y', | ||||
|         'only_matching': True, | ||||
|     }, { | ||||
|         'url': 'http://www.nickelodeon.com.tr/programlar/sunger-bob/videolar/kayip-yatak/mgqbjy', | ||||
|         'only_matching': True, | ||||
|     }] | ||||
| 
 | ||||
|     def _real_extract(self, url): | ||||
|         video_id = self._match_id(url) | ||||
|         webpage = self._download_webpage(url, video_id) | ||||
|         mgid = self._extract_mgid(webpage, url) | ||||
|         return self.url_result(f'http://media.mtvnservices.com/embed/{mgid}') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bashonly
					bashonly