]> jfr.im git - yt-dlp.git/blame - yt_dlp/extractor/toggo.py
[spotify] Detect iframe embeds (#3430)
[yt-dlp.git] / yt_dlp / extractor / toggo.py
CommitLineData
b5f94e4f 1from .common import InfoExtractor
2from ..utils import int_or_none, parse_qs
3
4
5class ToggoIE(InfoExtractor):
6 IE_NAME = 'toggo'
7 _VALID_URL = r'https?://(?:www\.)?toggo\.de/[\w-]+/folge/(?P<id>[\w-]+)'
8 _TESTS = [{
9 'url': 'https://www.toggo.de/weihnachtsmann--co-kg/folge/ein-geschenk-fuer-zwei',
10 'info_dict': {
11 'id': 'VEP2977',
12 'ext': 'mp4',
13 'title': 'Ein Geschenk für zwei',
14 'display_id': 'ein-geschenk-fuer-zwei',
15 'thumbnail': r're:^https?://.*\.(?:jpg|png)',
16 'description': 'md5:b7715915bfa47824b4e4ad33fb5962f8',
17 'release_timestamp': 1637259179,
18 'series': 'Weihnachtsmann & Co. KG',
19 'season': 'Weihnachtsmann & Co. KG',
20 'season_number': 1,
21 'season_id': 'VST118',
22 'episode': 'Ein Geschenk für zwei',
23 'episode_number': 7,
24 'episode_id': 'VEP2977',
25 'timestamp': 1581935960,
26 'uploader_id': '6057955896001',
27 'upload_date': '20200217',
28 },
29 'params': {'skip_download': True},
30 }]
31
32 def _real_extract(self, url):
33 display_id = self._match_id(url)
34 data = self._download_json(
35 f'https://production-n.toggo.de/api/assetstore/vod/asset/{display_id}', display_id)['data']
36
37 brightcove_id = next(
38 x['value'] for x in data['custom_fields'] if x.get('key') == 'video-cloud-id')
39 info = self._downloader.get_info_extractor('BrightcoveNew').extract(
40 f'http://players.brightcove.net/6057955896001/default_default/index.html?videoId={brightcove_id}')
41
42 for f in info['formats']:
43 if '/dash/live/cenc/' in f.get('fragment_base_url', ''):
44 # Get hidden non-DRM format
45 f['fragment_base_url'] = f['fragment_base_url'].replace('/cenc/', '/clear/')
46 f['has_drm'] = False
47
48 if '/fairplay/' in f.get('manifest_url', ''):
49 f['has_drm'] = True
50
51 thumbnails = [{
52 'id': name,
53 'url': url,
54 'width': int_or_none(next(iter(parse_qs(url).get('width', [])), None)),
55 } for name, url in (data.get('images') or {}).items()]
56
57 return {
58 **info,
59 'id': data.get('id'),
60 'display_id': display_id,
61 'title': data.get('title'),
62 'language': data.get('language'),
63 'thumbnails': thumbnails,
64 'description': data.get('description'),
65 'release_timestamp': data.get('earliest_start_date'),
66 'series': data.get('series_title'),
67 'season': data.get('season_title'),
68 'season_number': data.get('season_no'),
69 'season_id': data.get('season_id'),
70 'episode': data.get('title'),
71 'episode_number': data.get('episode_no'),
72 'episode_id': data.get('id'),
73 }