]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/theta.py
1 from .common
import InfoExtractor
2 from ..utils
import try_get
5 class ThetaStreamIE(InfoExtractor
):
6 _VALID_URL
= r
'https?://(?:www\.)?theta\.tv/(?!video/)(?P<id>[a-z0-9-]+)'
8 'url': 'https://www.theta.tv/davirus',
9 'skip': 'The live may have ended',
13 'title': 'I choose you - My Community is King -👀 - YO HABLO ESPANOL - CODE DAVIRUS',
14 'thumbnail': r
're:https://live-thumbnails-prod-theta-tv\.imgix\.net/thumbnail/.+\.jpg',
17 'url': 'https://www.theta.tv/mst3k',
18 'note': 'This channel is live 24/7',
22 'title': 'Mystery Science Theatre 3000 24/7 Powered by the THETA Network.',
23 'thumbnail': r
're:https://user-prod-theta-tv\.imgix\.net/.+\.jpg',
26 'url': 'https://www.theta.tv/contv-anime',
30 'title': 'CONTV ANIME 24/7. Powered by THETA Network.',
31 'thumbnail': r
're:https://user-prod-theta-tv\.imgix\.net/.+\.jpg',
35 def _real_extract(self
, url
):
36 channel_id
= self
._match
_id
(url
)
37 info
= self
._download
_json
(f
'https://api.theta.tv/v1/channel?alias={channel_id}', channel_id
)['body']
40 data
['url'] for data
in info
['live_stream']['video_urls']
41 if data
.get('type') != 'embed' and data
.get('resolution') in ('master', 'source'))
43 formats
= self
._extract
_m
3u8_formats
(m3u8_playlist
, channel_id
, 'mp4', m3u8_id
='hls', live
=True)
44 self
._sort
_formats
(formats
)
46 channel
= try_get(info
, lambda x
: x
['user']['username']) # using this field instead of channel_id due to capitalization
50 'title': try_get(info
, lambda x
: x
['live_stream']['title']),
52 'view_count': try_get(info
, lambda x
: x
['live_stream']['view_count']),
55 'thumbnail': try_get(info
, lambda x
: x
['live_stream']['thumbnail_url']),
59 class ThetaVideoIE(InfoExtractor
):
60 _VALID_URL
= r
'https?://(?:www\.)?theta\.tv/video/(?P<id>vid[a-z0-9]+)'
62 'url': 'https://www.theta.tv/video/vidiq6aaet3kzf799p0',
63 'md5': '633d8c29eb276bb38a111dbd591c677f',
65 'id': 'vidiq6aaet3kzf799p0',
67 'title': 'Theta EdgeCast Tutorial',
68 'uploader': 'Pixiekittie',
69 'description': 'md5:e316253f5bdced8b5a46bb50ae60a09f',
70 'thumbnail': r
're:https://user-prod-theta-tv\.imgix\.net/.+/vod_thumb/.+.jpg',
74 def _real_extract(self
, url
):
75 video_id
= self
._match
_id
(url
)
76 info
= self
._download
_json
(f
'https://api.theta.tv/v1/video/{video_id}/raw', video_id
)['body']
78 m3u8_playlist
= try_get(info
, lambda x
: x
['video_urls'][0]['url'])
80 formats
= self
._extract
_m
3u8_formats
(m3u8_playlist
, video_id
, 'mp4', m3u8_id
='hls')
81 self
._sort
_formats
(formats
)
85 'title': info
.get('title'),
86 'uploader': try_get(info
, lambda x
: x
['user']['username']),
87 'description': info
.get('description'),
88 'view_count': info
.get('view_count'),
89 'like_count': info
.get('like_count'),
91 'thumbnail': info
.get('thumbnail_url'),