diff options
author | Sergey M․ <[email protected]> | 2020-06-06 00:12:47 +0700 |
---|---|---|
committer | Sergey M․ <[email protected]> | 2020-06-06 00:12:47 +0700 |
commit | a0455d0ffd93b069b8ab1aa95b7fa7d0bc526302 (patch) | |
tree | 839d5ca267550b826bd44de39edd1a4454b3391e | |
parent | c8b232cc48858713d9f5c88300ffcbd022d740b2 (diff) | |
download | youtube-dl-a0455d0ffd93b069b8ab1aa95b7fa7d0bc526302.tar.gz youtube-dl-a0455d0ffd93b069b8ab1aa95b7fa7d0bc526302.zip |
[twitch] Pass v5 accept header and fix thumbnails extraction (closes #25531)
-rw-r--r-- | youtube_dl/extractor/twitch.py | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/youtube_dl/extractor/twitch.py b/youtube_dl/extractor/twitch.py index 78ee0115c..45b8a7236 100644 --- a/youtube_dl/extractor/twitch.py +++ b/youtube_dl/extractor/twitch.py @@ -21,6 +21,7 @@ from ..utils import ( orderedSet, parse_duration, parse_iso8601, + qualities, try_get, unified_timestamp, update_url_query, @@ -50,7 +51,10 @@ class TwitchBaseIE(InfoExtractor): def _call_api(self, path, item_id, *args, **kwargs): headers = kwargs.get('headers', {}).copy() - headers['Client-ID'] = self._CLIENT_ID + headers.update({ + 'Accept': 'application/vnd.twitchtv.v5+json; charset=UTF-8', + 'Client-ID': self._CLIENT_ID, + }) kwargs['headers'] = headers response = self._download_json( '%s/%s' % (self._API_BASE, path), item_id, @@ -186,12 +190,27 @@ class TwitchItemBaseIE(TwitchBaseIE): is_live = False else: is_live = None + _QUALITIES = ('small', 'medium', 'large') + quality_key = qualities(_QUALITIES) + thumbnails = [] + preview = info.get('preview') + if isinstance(preview, dict): + for thumbnail_id, thumbnail_url in preview.items(): + thumbnail_url = url_or_none(thumbnail_url) + if not thumbnail_url: + continue + if thumbnail_id not in _QUALITIES: + continue + thumbnails.append({ + 'url': thumbnail_url, + 'preference': quality_key(thumbnail_id), + }) return { 'id': info['_id'], 'title': info.get('title') or 'Untitled Broadcast', 'description': info.get('description'), 'duration': int_or_none(info.get('length')), - 'thumbnail': info.get('preview'), + 'thumbnails': thumbnails, 'uploader': info.get('channel', {}).get('display_name'), 'uploader_id': info.get('channel', {}).get('name'), 'timestamp': parse_iso8601(info.get('recorded_at')), |