]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/philharmoniedeparis.py
1 from .common
import InfoExtractor
2 from ..compat
import compat_str
3 from ..utils
import try_get
6 class PhilharmonieDeParisIE(InfoExtractor
):
7 IE_DESC
= 'Philharmonie de Paris'
11 live\.philharmoniedeparis\.fr/(?:[Cc]oncert/|embed(?:app)?/|misc/Playlist\.ashx\?id=)|
12 pad\.philharmoniedeparis\.fr/(?:doc/CIMU/|player\.aspx\?id=)|
13 philharmoniedeparis\.fr/fr/live/concert/|
14 otoplayer\.philharmoniedeparis\.fr/fr/embed/
19 'url': 'https://philharmoniedeparis.fr/fr/live/concert/1129666-danses-symphoniques',
20 'md5': '24bdb7e86c200c107680e1f7770330ae',
24 'title': 'Danses symphoniques. Orchestre symphonique Divertimento - Zahia Ziouani. Bizet, de Falla, Stravinski, Moussorgski, Saint-Saëns',
27 'url': 'https://philharmoniedeparis.fr/fr/live/concert/1032066-akademie-fur-alte-musik-berlin-rias-kammerchor-rene-jacobs-passion-selon-saint-jean-de-johann',
30 'title': 'Akademie für alte Musik Berlin, Rias Kammerchor, René Jacobs : Passion selon saint Jean de Johann Sebastian Bach',
32 'playlist_mincount': 2,
34 'url': 'https://philharmoniedeparis.fr/fr/live/concert/1030324-orchestre-philharmonique-de-radio-france-myung-whun-chung-renaud-capucon-pascal-dusapin-johannes',
35 'only_matching': True,
37 'url': 'http://live.philharmoniedeparis.fr/misc/Playlist.ashx?id=1030324&track=&lang=fr',
38 'only_matching': True,
40 'url': 'https://live.philharmoniedeparis.fr/embedapp/1098406/berlioz-fantastique-lelio-les-siecles-national-youth-choir-of.html?lang=fr-FR',
41 'only_matching': True,
43 'url': 'https://otoplayer.philharmoniedeparis.fr/fr/embed/1098406?lang=fr-FR',
44 'only_matching': True,
47 def _real_extract(self
, url
):
48 video_id
= self
._match
_id
(url
)
50 config
= self
._download
_json
(
51 'https://otoplayer.philharmoniedeparis.fr/fr/config/%s.json' % video_id
, video_id
, query
={
56 def extract_entry(source
):
57 if not isinstance(source
, dict):
59 title
= source
.get('title')
62 files
= source
.get('files')
63 if not isinstance(files
, dict):
67 for format_id
in ('mobile', 'desktop'):
69 files
, lambda x
: x
[format_id
]['file'], compat_str
)
70 if not format_url
or format_url
in format_urls
:
72 format_urls
.add(format_url
)
73 formats
.extend(self
._extract
_m
3u8_formats
(
74 format_url
, video_id
, 'mp4', entry_protocol
='m3u8_native',
75 m3u8_id
='hls', fatal
=False))
76 if not formats
and not self
.get_param('ignore_no_formats'):
81 'thumbnail': files
.get('thumbnail'),
83 info
= extract_entry(config
)
90 for num
, chapter
in enumerate(config
['chapters'], start
=1):
91 entry
= extract_entry(chapter
)
94 entry
['id'] = '%s-%d' % (video_id
, num
)
97 return self
.playlist_result(entries
, video_id
, config
.get('title'))