aboutsummaryrefslogtreecommitdiffstats
path: root/hypervideo_dl/extractor/twitter.py
diff options
context:
space:
mode:
Diffstat (limited to 'hypervideo_dl/extractor/twitter.py')
-rw-r--r--hypervideo_dl/extractor/twitter.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/hypervideo_dl/extractor/twitter.py b/hypervideo_dl/extractor/twitter.py
index 485b781..8ccc38e 100644
--- a/hypervideo_dl/extractor/twitter.py
+++ b/hypervideo_dl/extractor/twitter.py
@@ -13,8 +13,10 @@ from ..compat import (
from ..utils import (
dict_get,
ExtractorError,
+ format_field,
float_or_none,
int_or_none,
+ traverse_obj,
try_get,
strip_or_none,
unified_timestamp,
@@ -55,7 +57,7 @@ class TwitterBaseIE(InfoExtractor):
def _extract_formats_from_vmap_url(self, vmap_url, video_id):
vmap_url = url_or_none(vmap_url)
if not vmap_url:
- return []
+ return [], {}
vmap_data = self._download_xml(vmap_url, video_id)
formats = []
subtitles = {}
@@ -88,6 +90,9 @@ class TwitterBaseIE(InfoExtractor):
headers = {
'Authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw',
}
+ token = self._get_cookies(self._API_BASE).get('ct0')
+ if token:
+ headers['x-csrf-token'] = token.value
if not self._GUEST_TOKEN:
self._GUEST_TOKEN = self._download_json(
self._API_BASE + 'guest/activate.json', video_id,
@@ -468,7 +473,7 @@ class TwitterIE(TwitterBaseIE):
'uploader': uploader,
'timestamp': unified_timestamp(status.get('created_at')),
'uploader_id': uploader_id,
- 'uploader_url': 'https://twitter.com/' + uploader_id if uploader_id else None,
+ 'uploader_url': format_field(uploader_id, template='https://twitter.com/%s'),
'like_count': int_or_none(status.get('favorite_count')),
'repost_count': int_or_none(status.get('retweet_count')),
'comment_count': int_or_none(status.get('reply_count')),
@@ -485,7 +490,7 @@ class TwitterIE(TwitterBaseIE):
fmts, subs = self._extract_variant_formats(variant, twid)
subtitles = self._merge_subtitles(subtitles, subs)
formats.extend(fmts)
- self._sort_formats(formats)
+ self._sort_formats(formats, ('res', 'br', 'size', 'proto')) # The codec of http formats are unknown
thumbnails = []
media_url = media.get('media_url_https') or media.get('media_url')
@@ -508,7 +513,7 @@ class TwitterIE(TwitterBaseIE):
'duration': float_or_none(video_info.get('duration_millis'), 1000),
})
- media = try_get(status, lambda x: x['extended_entities']['media'][0])
+ media = traverse_obj(status, ((None, 'quoted_status'), 'extended_entities', 'media', 0), get_all=False)
if media and media.get('type') != 'photo':
extract_from_video_info(media)
else: