]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/tvplayer.py
1 from .common
import InfoExtractor
14 class TVPlayerIE(InfoExtractor
):
15 _VALID_URL
= r
'https?://(?:www\.)?tvplayer\.com/watch/(?P<id>[^/?#]+)'
17 'url': 'http://tvplayer.com/watch/bbcone',
21 'title': r
're:^BBC One [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$',
25 'skip_download': True,
29 def _real_extract(self
, url
):
30 display_id
= self
._match
_id
(url
)
31 webpage
= self
._download
_webpage
(url
, display_id
)
33 current_channel
= extract_attributes(self
._search
_regex
(
34 r
'(<div[^>]+class="[^"]*current-channel[^"]*"[^>]*>)',
35 webpage
, 'channel element'))
36 title
= current_channel
['data-name']
38 resource_id
= current_channel
['data-id']
40 token
= self
._search
_regex
(
41 r
'data-token=(["\'])(?P
<token
>(?
!\
1).+)\
1', webpage,
42 'token
', group='token
')
44 context = self._download_json(
45 'https
://tvplayer
.com
/watch
/context
', display_id,
46 'Downloading JSON context
', query={
47 'resource
': resource_id,
51 validate = context['validate
']
53 context, lambda x: x['platform
']['key
'], compat_str) or 'firefox
'
56 response = self._download_json(
57 'http
://api
.tvplayer
.com
/api
/v2
/stream
/live
',
58 display_id, 'Downloading JSON stream
', headers={
59 'Content
-Type
': 'application
/x
-www
-form
-urlencoded
; charset
=UTF
-8',
60 }, data=urlencode_postdata({
65 }))['tvplayer
']['response
']
66 except ExtractorError as e:
67 if isinstance(e.cause, compat_HTTPError):
68 response = self._parse_json(
69 e.cause.read().decode(), resource_id)['tvplayer
']['response
']
71 '%s said
: %s' % (self.IE_NAME, response['error
']), expected=True)
74 formats = self._extract_m3u8_formats(response['stream
'], display_id, 'mp4
')
78 'display_id
': display_id,