]> jfr.im git - yt-dlp.git/blame - youtube_dlc/extractor/sprout.py
Update to ytdl-2021.01.03
[yt-dlp.git] / youtube_dlc / extractor / sprout.py
CommitLineData
b0497573
RA
1# coding: utf-8
2from __future__ import unicode_literals
3
4from .adobepass import AdobePassIE
5from ..utils import (
29f7c58a 6 int_or_none,
b0497573 7 smuggle_url,
29f7c58a 8 update_url_query,
b0497573
RA
9)
10
11
12class 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 }