mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-30 04:10:23 +00:00
Work on twitch.tv chapters (#810)
This commit is contained in:
parent
09dd418f53
commit
0e16f09474
@ -3304,7 +3304,13 @@ class JustinTVIE(InfoExtractor):
|
||||
# starts at 1 and increases. Can we treat all parts as one video?
|
||||
|
||||
_VALID_URL = r"""(?x)^(?:http://)?(?:www\.)?(?:twitch|justin)\.tv/
|
||||
([^/]+)(?:/b/([^/]+))?/?(?:\#.*)?$"""
|
||||
(?:
|
||||
(?P<channelid>[^/]+)|
|
||||
(?:(?:[^/]+)/b/(?P<videoid>[^/]+))|
|
||||
(?:(?:[^/]+)/c/(?P<chapterid>[^/]+))
|
||||
)
|
||||
/?(?:\#.*)?$
|
||||
"""
|
||||
_JUSTIN_PAGE_LIMIT = 100
|
||||
IE_NAME = u'justin.tv'
|
||||
|
||||
@ -3346,18 +3352,43 @@ def _parse_page(self, url, video_id):
|
||||
def _real_extract(self, url):
|
||||
mobj = re.match(self._VALID_URL, url)
|
||||
if mobj is None:
|
||||
self._downloader.report_error(u'invalid URL: %s' % url)
|
||||
return
|
||||
raise ExtractorError(u'invalid URL: %s' % url)
|
||||
|
||||
api = 'http://api.justin.tv'
|
||||
video_id = mobj.group(mobj.lastindex)
|
||||
api_base = 'http://api.justin.tv'
|
||||
paged = False
|
||||
if mobj.lastindex == 1:
|
||||
if mobj.group('channelid'):
|
||||
paged = True
|
||||
api += '/channel/archives/%s.json'
|
||||
video_id = mobj.group('channelid')
|
||||
api = api_base + '/channel/archives/%s.json' % video_id
|
||||
elif mobj.group('chapterid'):
|
||||
chapter_id = mobj.group('chapterid')
|
||||
# youtube-dl -v http://www.twitch.tv/firmbelief/c/1757457
|
||||
|
||||
webpage = self._download_webpage(url, chapter_id)
|
||||
m = re.search(r'PP\.archive_id = "([0-9]+)";', webpage)
|
||||
if not m:
|
||||
raise ExtractorError('Cannot find archive of a chapter')
|
||||
archive_id = m.group(1)
|
||||
|
||||
api = api_base + '/broadcast/by_chapter/%s.json' % chapter_id
|
||||
chapter_info_json = self._download_webpage(api, chapter_id,
|
||||
note='Downloading chapter information',
|
||||
errnote='Chapter information download failed')
|
||||
chapter_info = json.loads(chapter_info_json)
|
||||
video_info = filter(lambda ci: str(ci['id']) == archive_id, chapter_info)
|
||||
|
||||
video_url = 'TODO:SERVER_NAME' + '/archives/' + vi['file_name'] + '?start=TODO:startid'
|
||||
|
||||
# Result: http://store36.media36.justin.tv/archives/2012-12-2/live_user_firmbelief_1354484906.flv?start=51670615
|
||||
# (this may not be playable, may need to craft some additional headers)
|
||||
# TODO: title ("GOD", from webpage?)
|
||||
# TODO: ext (from vi['file_name'])
|
||||
# print(json.dumps(video_info, indent=2))
|
||||
# return
|
||||
raise NotImplementedError('twitch.tv chapters are not yet supported, sorry (See https://github.com/rg3/youtube-dl/issues/810 )')
|
||||
else:
|
||||
api += '/broadcast/by_archive/%s.json'
|
||||
api = api % (video_id,)
|
||||
video_id = mobj.group('videoid')
|
||||
api = api_base + '/broadcast/by_archive/%s.json' % video_id
|
||||
|
||||
self.report_extraction(video_id)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user