|
|
|
@ -24,18 +24,28 @@ class TwitchIE(InfoExtractor):
|
|
|
|
|
"""
|
|
|
|
|
_PAGE_LIMIT = 100
|
|
|
|
|
_API_BASE = 'https://api.twitch.tv'
|
|
|
|
|
_TEST = {
|
|
|
|
|
'url': 'http://www.twitch.tv/thegamedevhub/b/296128360',
|
|
|
|
|
'md5': 'ecaa8a790c22a40770901460af191c9a',
|
|
|
|
|
_TESTS = [{
|
|
|
|
|
'url': 'http://www.twitch.tv/riotgames/b/577357806',
|
|
|
|
|
'info_dict': {
|
|
|
|
|
'id': '296128360',
|
|
|
|
|
'ext': 'flv',
|
|
|
|
|
'upload_date': '20110927',
|
|
|
|
|
'uploader_id': 25114803,
|
|
|
|
|
'uploader': 'thegamedevhub',
|
|
|
|
|
'title': 'Beginner Series - Scripting With Python Pt.1'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
'id': 'a577357806',
|
|
|
|
|
'title': 'Worlds Semifinals - Star Horn Royal Club vs. OMG',
|
|
|
|
|
},
|
|
|
|
|
'playlist_mincount': 12,
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'http://www.twitch.tv/acracingleague/c/5285812',
|
|
|
|
|
'info_dict': {
|
|
|
|
|
'id': 'c5285812',
|
|
|
|
|
'title': 'ACRL Off Season - Sports Cars @ Nordschleife',
|
|
|
|
|
},
|
|
|
|
|
'playlist_mincount': 3,
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'http://www.twitch.tv/vanillatv',
|
|
|
|
|
'info_dict': {
|
|
|
|
|
'id': 'vanillatv',
|
|
|
|
|
'title': 'VanillaTV',
|
|
|
|
|
},
|
|
|
|
|
'playlist_mincount': 412,
|
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
def _handle_error(self, response):
|
|
|
|
|
if not isinstance(response, dict):
|
|
|
|
@ -80,10 +90,11 @@ class TwitchIE(InfoExtractor):
|
|
|
|
|
formats.append(fmt)
|
|
|
|
|
self._sort_formats(formats)
|
|
|
|
|
entry = dict(info)
|
|
|
|
|
entry['id'] = '%s_%d' % (entry['id'], num),
|
|
|
|
|
entry['title'] = '%s part %d' % (entry['title'], num)
|
|
|
|
|
entry['formats'] = formats
|
|
|
|
|
entries.append(entry)
|
|
|
|
|
return entries
|
|
|
|
|
return self.playlist_result(entries, info['id'], info['title'])
|
|
|
|
|
|
|
|
|
|
def _extract_info(self, info):
|
|
|
|
|
return {
|
|
|
|
|