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