]>
Commit | Line | Data |
---|---|---|
b0497573 RA |
1 | # coding: utf-8 |
2 | from __future__ import unicode_literals | |
3 | ||
4 | from .adobepass import AdobePassIE | |
5 | from ..utils import ( | |
29f7c58a | 6 | int_or_none, |
b0497573 | 7 | smuggle_url, |
29f7c58a | 8 | update_url_query, |
b0497573 RA |
9 | ) |
10 | ||
11 | ||
12 | class SproutIE(AdobePassIE): | |
29f7c58a | 13 | _VALID_URL = r'https?://(?:www\.)?(?:sproutonline|universalkids)\.com/(?:watch|(?:[^/]+/)*videos)/(?P<id>[^/?#]+)' |
14 | _TESTS = [{ | |
15 | 'url': 'https://www.universalkids.com/shows/remy-and-boo/season/1/videos/robot-bike-race', | |
b0497573 | 16 | 'info_dict': { |
29f7c58a | 17 | 'id': 'bm0foJFaTKqb', |
b0497573 | 18 | 'ext': 'mp4', |
29f7c58a | 19 | 'title': 'Robot Bike Race', |
20 | 'description': 'md5:436b1d97117cc437f54c383f4debc66d', | |
21 | 'timestamp': 1606148940, | |
22 | 'upload_date': '20201123', | |
23 | 'uploader': 'NBCU-MPAT', | |
24 | }, | |
25 | 'params': { | |
26 | 'skip_download': True, | |
27 | }, | |
28 | }, { | |
29 | 'url': 'http://www.sproutonline.com/watch/cowboy-adventure', | |
30 | 'only_matching': True, | |
31 | }, { | |
32 | 'url': 'https://www.universalkids.com/watch/robot-bike-race', | |
33 | 'only_matching': True, | |
34 | }] | |
35 | _GEO_COUNTRIES = ['US'] | |
b0497573 RA |
36 | |
37 | def _real_extract(self, url): | |
29f7c58a | 38 | display_id = self._match_id(url) |
39 | mpx_metadata = self._download_json( | |
40 | # http://nbcuunikidsprod.apps.nbcuni.com/networks/universalkids/content/videos/ | |
41 | 'https://www.universalkids.com/_api/videos/' + display_id, | |
42 | display_id)['mpxMetadata'] | |
43 | media_pid = mpx_metadata['mediaPid'] | |
44 | theplatform_url = 'https://link.theplatform.com/s/HNK2IC/' + media_pid | |
45 | query = { | |
46 | 'mbr': 'true', | |
47 | 'manifest': 'm3u', | |
48 | } | |
49 | if mpx_metadata.get('entitlement') == 'auth': | |
50 | query['auth'] = self._extract_mvpd_auth(url, media_pid, 'sprout', 'sprout') | |
51 | theplatform_url = smuggle_url( | |
52 | update_url_query(theplatform_url, query), { | |
53 | 'force_smil_url': True, | |
54 | 'geo_countries': self._GEO_COUNTRIES, | |
55 | }) | |
56 | return { | |
57 | '_type': 'url_transparent', | |
58 | 'id': media_pid, | |
59 | 'url': theplatform_url, | |
60 | 'series': mpx_metadata.get('seriesName'), | |
61 | 'season_number': int_or_none(mpx_metadata.get('seasonNumber')), | |
62 | 'episode_number': int_or_none(mpx_metadata.get('episodeNumber')), | |
63 | 'ie_key': 'ThePlatform', | |
64 | } |