]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/nick.py
[cleanup] Add more ruff rules (#10149)
[yt-dlp.git] / yt_dlp / extractor / nick.py
CommitLineData
a0e5beb0 1from .mtv import MTVServicesInfoExtractor
f0118760 2from ..utils import update_url_query
a0e5beb0 3
4
5class NickIE(MTVServicesInfoExtractor):
6 IE_NAME = 'nick.com'
f3b737ed 7 _VALID_URL = r'https?://(?P<domain>(?:www\.)?nick(?:jr)?\.com)/(?:[^/]+/)?(?P<type>videos/clip|[^/]+/videos|episodes/[^/]+)/(?P<id>[^/?#.]+)'
a0e5beb0 8 _FEED_URL = 'http://udat.mtvnservices.com/service1/dispatch.htm'
f0e31e32 9 _GEO_COUNTRIES = ['US']
a0e5beb0 10 _TESTS = [{
f3b737ed
HD
11 'url': 'https://www.nick.com/episodes/sq47rw/spongebob-squarepants-a-place-for-pets-lockdown-for-love-season-13-ep-1',
12 'info_dict': {
13 'description': 'md5:0650a9eb88955609d5c1d1c79292e234',
14 'title': 'A Place for Pets/Lockdown for Love',
15 },
a0e5beb0 16 'playlist': [
17 {
f3b737ed 18 'md5': 'cb8a2afeafb7ae154aca5a64815ec9d6',
a0e5beb0 19 'info_dict': {
f3b737ed 20 'id': '85ee8177-d6ce-48f8-9eee-a65364f8a6df',
a0e5beb0 21 'ext': 'mp4',
f3b737ed
HD
22 'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S1',
23 '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.',
a0e5beb0 24
add96eb9 25 },
a0e5beb0 26 },
27 {
f3b737ed 28 'md5': '839a04f49900a1fcbf517020d94e0737',
a0e5beb0 29 'info_dict': {
f3b737ed 30 'id': '2e2a9960-8fd4-411d-868b-28eb1beb7fae',
a0e5beb0 31 'ext': 'mp4',
f3b737ed
HD
32 'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S2',
33 '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.',
a0e5beb0 34
add96eb9 35 },
a0e5beb0 36 },
37 {
f3b737ed 38 'md5': 'f1145699f199770e2919ee8646955d46',
a0e5beb0 39 'info_dict': {
f3b737ed 40 'id': 'dc91c304-6876-40f7-84a6-7aece7baa9d0',
a0e5beb0 41 'ext': 'mp4',
f3b737ed
HD
42 'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S3',
43 '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.',
44
add96eb9 45 },
a0e5beb0 46 },
47 {
f3b737ed 48 'md5': 'd463116875aee2585ee58de3b12caebd',
a0e5beb0 49 'info_dict': {
f3b737ed 50 'id': '5d929486-cf4c-42a1-889a-6e0d183a101a',
a0e5beb0 51 'ext': 'mp4',
f3b737ed
HD
52 'title': 'SpongeBob SquarePants: "A Place for Pets/Lockdown for Love" S4',
53 '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.',
54
add96eb9 55 },
a0e5beb0 56 },
57 ],
0ab7f4fe 58 }, {
f3b737ed
HD
59 'url': 'http://www.nickjr.com/blues-clues-and-you/videos/blues-clues-and-you-original-209-imagination-station/',
60 'info_dict': {
61 'id': '31631529-2fc5-430b-b2ef-6a74b4609abd',
62 'ext': 'mp4',
63 'description': 'md5:9d65a66df38e02254852794b2809d1cf',
64 'title': 'Blue\'s Imagination Station',
65 },
add96eb9 66 'skip': 'Not accessible?',
a0e5beb0 67 }]
68
69 def _get_feed_query(self, uri):
0c75abbb 70 return {
a0e5beb0 71 'feed': 'nick_arc_player_prime',
e565cf60 72 'mgid': uri,
0c75abbb 73 }
a0e5beb0 74
5868079e 75 def _real_extract(self, url):
5ad28e7f 76 domain, video_type, display_id = self._match_valid_url(url).groups()
add96eb9 77 if video_type.startswith('episodes'):
f3b737ed 78 return super()._real_extract(url)
5868079e 79 video_data = self._download_json(
add96eb9 80 f'http://{domain}/data/video.endLevel.json',
5868079e
RA
81 display_id, query={
82 'urlKey': display_id,
83 })
84 return self._get_videos_info(video_data['player'] + video_data['id'])
f0118760
S
85
86
127e98d3 87class NickBrIE(MTVServicesInfoExtractor):
08d77a95 88 IE_NAME = 'nickelodeon:br'
d65a48a0
S
89 _VALID_URL = r'''(?x)
90 https?://
91 (?:
92 (?P<domain>(?:www\.)?nickjr|mundonick\.uol)\.com\.br|
d7da1e37
PD
93 (?:www\.)?nickjr\.[a-z]{2}|
94 (?:www\.)?nickelodeonjunior\.fr
d65a48a0
S
95 )
96 /(?:programas/)?[^/]+/videos/(?:episodios/)?(?P<id>[^/?\#.]+)
97 '''
08d77a95
RA
98 _TESTS = [{
99 'url': 'http://www.nickjr.com.br/patrulha-canina/videos/210-labirinto-de-pipoca/',
100 'only_matching': True,
101 }, {
102 'url': 'http://mundonick.uol.com.br/programas/the-loud-house/videos/muitas-irmas/7ljo9j',
103 'only_matching': True,
d65a48a0
S
104 }, {
105 'url': 'http://www.nickjr.nl/paw-patrol/videos/311-ge-wol-dig-om-terug-te-zijn/',
106 'only_matching': True,
1344d3e1
S
107 }, {
108 'url': 'http://www.nickjr.de/blaze-und-die-monster-maschinen/videos/f6caaf8f-e4e8-4cc1-b489-9380d6dcd059/',
109 'only_matching': True,
d7da1e37
PD
110 }, {
111 'url': 'http://www.nickelodeonjunior.fr/paw-patrol-la-pat-patrouille/videos/episode-401-entier-paw-patrol/',
112 'only_matching': True,
08d77a95
RA
113 }]
114
115 def _real_extract(self, url):
5ad28e7f 116 domain, display_id = self._match_valid_url(url).groups()
08d77a95
RA
117 webpage = self._download_webpage(url, display_id)
118 uri = self._search_regex(
119 r'data-(?:contenturi|mgid)="([^"]+)', webpage, 'mgid')
120 video_id = self._id_from_uri(uri)
121 config = self._download_json(
122 'http://media.mtvnservices.com/pmt/e1/access/index.html',
123 video_id, query={
124 'uri': uri,
125 'configtype': 'edge',
126 }, headers={
127 'Referer': url,
128 })
129 info_url = self._remove_template_parameter(config['feedWithQueryParams'])
130 if info_url == 'None':
131 if domain.startswith('www.'):
132 domain = domain[4:]
133 content_domain = {
134 'mundonick.uol': 'mundonick.com.br',
135 'nickjr': 'br.nickelodeonjunior.tv',
136 }[domain]
137 query = {
138 'mgid': uri,
139 'imageEp': content_domain,
140 'arcEp': content_domain,
141 }
142 if domain == 'nickjr.com.br':
143 query['ep'] = 'c4b16088'
144 info_url = update_url_query(
145 'http://feeds.mtvnservices.com/od/feed/intl-mrss-player-feed', query)
146 return self._get_videos_info_from_url(info_url, video_id)
147
148
f0118760
S
149class NickDeIE(MTVServicesInfoExtractor):
150 IE_NAME = 'nick.de'
f03ee0b3 151 _VALID_URL = r'https?://(?:www\.)?(?P<host>nick\.(?:de|com\.pl|ch)|nickelodeon\.(?:nl|be|at|dk|no|se))/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)'
f0118760
S
152 _TESTS = [{
153 'url': 'http://www.nick.de/playlist/3773-top-videos/videos/episode/17306-zu-wasser-und-zu-land-rauchende-erdnusse',
154 'only_matching': True,
155 }, {
156 'url': 'http://www.nick.de/shows/342-icarly',
157 'only_matching': True,
f3eeaacb
S
158 }, {
159 'url': 'http://www.nickelodeon.nl/shows/474-spongebob/videos/17403-een-kijkje-in-de-keuken-met-sandy-van-binnenuit',
160 'only_matching': True,
9c82bba0
S
161 }, {
162 'url': 'http://www.nickelodeon.at/playlist/3773-top-videos/videos/episode/77993-das-letzte-gefecht',
163 'only_matching': True,
dee04d24
S
164 }, {
165 'url': 'http://www.nick.com.pl/seriale/474-spongebob-kanciastoporty/wideo/17412-teatr-to-jest-to-rodeo-oszolom',
166 'only_matching': True,
3ebbd999
AS
167 }, {
168 'url': 'http://www.nickelodeon.no/program/2626-bulderhuset/videoer/90947-femteklasse-veronica-vs-vanzilla',
169 'only_matching': True,
170 }, {
171 'url': 'http://www.nickelodeon.dk/serier/2626-hojs-hus/videoer/761-tissepause',
172 'only_matching': True,
173 }, {
174 'url': 'http://www.nickelodeon.se/serier/2626-lugn-i-stormen/videos/998-',
175 'only_matching': True,
cf6bda31
S
176 }, {
177 'url': 'http://www.nick.ch/shows/2304-adventure-time-abenteuerzeit-mit-finn-und-jake',
178 'only_matching': True,
f03ee0b3
S
179 }, {
180 'url': 'http://www.nickelodeon.be/afspeellijst/4530-top-videos/videos/episode/73917-inval-broodschapper-lariekoek-arie',
181 'only_matching': True,
f0118760
S
182 }]
183
51707d9a
U
184 def _get_feed_url(self, uri, url=None):
185 video_id = self._id_from_uri(uri)
186 config = self._download_json(
add96eb9 187 f'http://media.mtvnservices.com/pmt/e1/access/index.html?uri={uri}&configtype=edge&ref={url}', video_id)
51707d9a 188 return self._remove_template_parameter(config['feedWithQueryParams'])
e3577722
N
189
190
c99d6890
S
191class NickRuIE(MTVServicesInfoExtractor):
192 IE_NAME = 'nickelodeonru'
266fbd6b 193 _VALID_URL = r'https?://(?:www\.)nickelodeon\.(?:ru|fr|es|pt|ro|hu|com\.tr)/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)'
c99d6890
S
194 _TESTS = [{
195 'url': 'http://www.nickelodeon.ru/shows/henrydanger/videos/episodes/3-sezon-15-seriya-licenziya-na-polyot/pmomfb#playlist/7airc6',
196 'only_matching': True,
197 }, {
198 'url': 'http://www.nickelodeon.ru/videos/smotri-na-nickelodeon-v-iyule/g9hvh7',
199 'only_matching': True,
9ff6273c
S
200 }, {
201 'url': 'http://www.nickelodeon.fr/programmes/bob-l-eponge/videos/le-marathon-de-booh-kini-bottom-mardi-31-octobre/nfn7z0',
202 'only_matching': True,
203 }, {
204 'url': 'http://www.nickelodeon.es/videos/nickelodeon-consejos-tortitas/f7w7xy',
205 'only_matching': True,
206 }, {
207 'url': 'http://www.nickelodeon.pt/series/spongebob-squarepants/videos/a-bolha-de-tinta-gigante/xutq1b',
208 'only_matching': True,
209 }, {
210 'url': 'http://www.nickelodeon.ro/emisiuni/shimmer-si-shine/video/nahal-din-bomboane/uw5u2k',
211 'only_matching': True,
212 }, {
213 'url': 'http://www.nickelodeon.hu/musorok/spongyabob-kockanadrag/videok/episodes/buborekfujas-az-elszakadt-nadrag/q57iob#playlist/k6te4y',
214 'only_matching': True,
266fbd6b
S
215 }, {
216 'url': 'http://www.nickelodeon.com.tr/programlar/sunger-bob/videolar/kayip-yatak/mgqbjy',
217 'only_matching': True,
c99d6890
S
218 }]
219
220 def _real_extract(self, url):
221 video_id = self._match_id(url)
222 webpage = self._download_webpage(url, video_id)
cf7cb942 223 mgid = self._extract_mgid(webpage, url)
add96eb9 224 return self.url_result(f'http://media.mtvnservices.com/embed/{mgid}')