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