aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2020-06-06 00:12:47 +0700
committerSergey M․ <dstftw@gmail.com>2020-06-06 00:12:47 +0700
commita0455d0ffd93b069b8ab1aa95b7fa7d0bc526302 (patch)
tree839d5ca267550b826bd44de39edd1a4454b3391e
parentc8b232cc48858713d9f5c88300ffcbd022d740b2 (diff)
downloadyoutube-dl-a0455d0ffd93b069b8ab1aa95b7fa7d0bc526302.tar.xz
[twitch] Pass v5 accept header and fix thumbnails extraction (closes #25531)
-rw-r--r--youtube_dl/extractor/twitch.py23
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')),