1 from .common
import InfoExtractor
8 class PlaywireIE(InfoExtractor
):
9 _VALID_URL
= r
'https?://(?:config|cdn)\.playwire\.com(?:/v2)?/(?P<publisher_id>\d+)/(?:videos/v2|embed|config)/(?P<id>\d+)'
10 _EMBED_REGEX
= [r
'<script[^>]+data-config=(["\'])(?P
<url
>(?
:https?
:)?
//config\
.playwire\
.com
/.+?
)\
1']
13 'url
': 'http
://config
.playwire
.com
/14907/videos
/v2
/3353705/player
.json
',
14 'md5
': 'e6398701e3595888125729eaa2329ed9
',
18 'title
': 'S04_RM_UCL_Rus
',
19 'thumbnail
': r're
:^https?
://.*\
.png$
',
24 'url
': 'http
://config
.playwire
.com
/21772/videos
/v2
/4840492/zeus
.json
',
28 'title
': 'ITV EL SHOW FULL
',
32 'skip_download
': True,
35 # Multiple resolutions while bitrates missing
36 'url
': 'http
://cdn
.playwire
.com
/11625/embed
/85228.html
',
37 'only_matching
': True,
39 'url
': 'http
://config
.playwire
.com
/12421/videos
/v2
/3389892/zeus
.json
',
40 'only_matching
': True,
42 'url
': 'http
://cdn
.playwire
.com
/v2
/12342/config
/1532636.json
',
43 'only_matching
': True,
46 def _real_extract(self, url):
47 mobj = self._match_valid_url(url)
48 publisher_id, video_id = mobj.group('publisher_id
'), mobj.group('id')
50 player = self._download_json(
51 f'http
://config
.playwire
.com
/{publisher_id}
/videos
/v2
/{video_id}
/zeus
.json
',
54 title = player['settings
']['title
']
55 duration = float_or_none(player.get('duration
'), 1000)
57 content = player['content
']
58 thumbnail = content.get('poster
')
59 src = content['media
']['f4m
']
61 formats = self._extract_f4m_formats(src, video_id, m3u8_id='hls
')
62 for a_format in formats:
63 if not dict_get(a_format, ['tbr
', 'width
', 'height
']):
64 a_format['quality
'] = 1 if '-hd
.' in a_format['url
'] else 0
69 'thumbnail
': thumbnail,