From 3e1144a71d2dfb5ae68962ba1d69cdbf49623600 Mon Sep 17 00:00:00 2001 From: Avi Peretz Date: Thu, 14 Nov 2019 16:41:25 +0200 Subject: [PATCH] add twitter views back. --- youtube_dl/extractor/twitter.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/youtube_dl/extractor/twitter.py b/youtube_dl/extractor/twitter.py index 5f8d90fb4..dd9498dfd 100644 --- a/youtube_dl/extractor/twitter.py +++ b/youtube_dl/extractor/twitter.py @@ -2,6 +2,8 @@ from __future__ import unicode_literals import re +import time + from .common import InfoExtractor from ..compat import ( @@ -20,6 +22,7 @@ from ..utils import ( unified_timestamp, update_url_query, xpath_text, + parse_count ) from .periscope import ( @@ -79,11 +82,20 @@ class TwitterBaseIE(InfoExtractor): headers = { 'Authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw', } + ct0 = self._get_cookies(self._API_BASE).get('ct0') + if ct0: + headers['x-csrf-token'] = ct0.value if not self._GUEST_TOKEN: - self._GUEST_TOKEN = self._download_json( - self._API_BASE + 'guest/activate.json', video_id, - 'Downloading guest token', data=b'', - headers=headers)['guest_token'] + guest_token_c = self._get_cookies('http://api.twitter.com/').get('gt') + if guest_token_c: + self._GUEST_TOKEN = guest_token_c + else: + self._GUEST_TOKEN = self._download_json( + self._API_BASE + 'guest/activate.json', video_id, + 'Downloading guest token', data=b'', + headers=headers)['guest_token'] + self._set_cookie('api.twitter.com', 'gt', self._GUEST_TOKEN, expire_time=time.time() + 3000) + headers['x-guest-token'] = self._GUEST_TOKEN try: return self._download_json( @@ -380,6 +392,12 @@ class TwitterIE(TwitterBaseIE): def _real_extract(self, url): twid = self._match_id(url) + # Download page to fetch cookies + self._download_webpage(url, twid) + config = self._call_api( + 'videos/tweet/config/%s.json' % twid, twid + ) + status = self._call_api( 'statuses/show/%s.json' % twid, twid, { 'cards_platform': 'Web-12', @@ -389,6 +407,8 @@ class TwitterIE(TwitterBaseIE): 'tweet_mode': 'extended', }) + + title = description = status['full_text'].replace('\n', ' ') # strip 'https -_t.co_BJYgOjSeGA' junk from filenames title = re.sub(r'\s+(https?://[^ ]+)', '', title) @@ -447,6 +467,7 @@ class TwitterIE(TwitterBaseIE): 'formats': formats, 'thumbnails': thumbnails, 'duration': float_or_none(video_info.get('duration_millis'), 1000), + 'view_count': parse_count(config.get('track', {}).get('viewCount')) }) else: card = status.get('card')