]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/nick.py
[ie/orf:on] Improve extraction (#9677)
[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
25 }
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
35 }
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
a0e5beb0 45 }
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
a0e5beb0 55 }
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 },
54153fb7 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()
f3b737ed
HD
77 if video_type.startswith("episodes"):
78 return super()._real_extract(url)
5868079e
RA
79 video_data = self._download_json(
80 'http://%s/data/video.endLevel.json' % domain,
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(
187 'http://media.mtvnservices.com/pmt/e1/access/index.html?uri=%s&configtype=edge&ref=%s' % (uri, url), video_id)
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)
c99d6890 224 return self.url_result('http://media.mtvnservices.com/embed/%s' % mgid)