]>
Commit | Line | Data |
---|---|---|
a0e5beb0 | 1 | # coding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
9c82bba0 | 4 | |
a0e5beb0 | 5 | from .mtv import MTVServicesInfoExtractor |
f0118760 | 6 | from ..utils import update_url_query |
a0e5beb0 | 7 | |
8 | ||
9 | class 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 | 91 | class 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 |
153 | class 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 |
195 | class 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 | ||
215 | class 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) |