mirror of
https://codeberg.org/polarisfm/youtube-dl
synced 2024-11-22 16:44:32 +01:00
Add subtitle support for roosterteeth.com
This commit is contained in:
parent
fffc618c51
commit
974aaa407b
@ -86,9 +86,11 @@ class RoosterTeethIE(InfoExtractor):
|
|||||||
api_episode_url = self._EPISODE_BASE_URL + display_id
|
api_episode_url = self._EPISODE_BASE_URL + display_id
|
||||||
|
|
||||||
try:
|
try:
|
||||||
m3u8_url = self._download_json(
|
video_data = self._download_json(
|
||||||
api_episode_url + '/videos', display_id,
|
api_episode_url + '/videos', display_id,
|
||||||
'Downloading video JSON metadata')['data'][0]['attributes']['url']
|
'Downloading video JSON metadata')['data'][0]
|
||||||
|
m3u8_url = video_data['attributes']['url']
|
||||||
|
subtitle_m3u8_url = video_data['links']['download']
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:
|
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:
|
||||||
if self._parse_json(e.cause.read().decode(), display_id).get('access') is False:
|
if self._parse_json(e.cause.read().decode(), display_id).get('access') is False:
|
||||||
@ -118,6 +120,33 @@ class RoosterTeethIE(InfoExtractor):
|
|||||||
'id': k,
|
'id': k,
|
||||||
'url': img_url,
|
'url': img_url,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
subtitles = {}
|
||||||
|
res = self._download_webpage_handle(
|
||||||
|
subtitle_m3u8_url, display_id,
|
||||||
|
'Downloading m3u8 information',
|
||||||
|
'Failed to download m3u8 information',
|
||||||
|
fatal=True, data=None, headers={}, query={})
|
||||||
|
if res is not False:
|
||||||
|
subtitle_m3u8_doc, _ = res
|
||||||
|
for line in subtitle_m3u8_doc.split('\n'):
|
||||||
|
if 'EXT-X-MEDIA:TYPE=SUBTITLES' in line:
|
||||||
|
parts = line.split(',')
|
||||||
|
for part in parts:
|
||||||
|
if 'LANGUAGE' in part:
|
||||||
|
lang = part[part.index('=')+2:-1]
|
||||||
|
elif 'URI' in part:
|
||||||
|
uri = part[part.index('=')+2:-1]
|
||||||
|
res = self._download_webpage_handle(
|
||||||
|
uri, display_id,
|
||||||
|
'Downloading m3u8 information',
|
||||||
|
'Failed to download m3u8 information',
|
||||||
|
fatal=True, data=None, headers={}, query={})
|
||||||
|
doc, _ = res
|
||||||
|
for l in doc.split('\n'):
|
||||||
|
if not l.startswith('#'):
|
||||||
|
subtitles[lang] = [{'url':uri[:-uri[::-1].index('/')]+l}]
|
||||||
|
break
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
@ -134,4 +163,5 @@ class RoosterTeethIE(InfoExtractor):
|
|||||||
'formats': formats,
|
'formats': formats,
|
||||||
'channel_id': attributes.get('channel_id'),
|
'channel_id': attributes.get('channel_id'),
|
||||||
'duration': int_or_none(attributes.get('length')),
|
'duration': int_or_none(attributes.get('length')),
|
||||||
|
'subtitles': subtitles
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user