[extractor/triller] Fix auth token (#4813)

Authored by: bashonly
This commit is contained in:
bashonly 2022-09-01 22:08:05 +00:00 committed by GitHub
parent 5469a4ab11
commit d6f8871964
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -15,11 +15,11 @@
class TrillerBaseIE(InfoExtractor): class TrillerBaseIE(InfoExtractor):
_NETRC_MACHINE = 'triller' _NETRC_MACHINE = 'triller'
_AUTH_TOKEN = None
_API_BASE_URL = 'https://social.triller.co/v1.5' _API_BASE_URL = 'https://social.triller.co/v1.5'
_API_HEADERS = {'Origin': 'https://triller.co'}
def _perform_login(self, username, password): def _perform_login(self, username, password):
if self._AUTH_TOKEN: if self._API_HEADERS.get('Authorization'):
return return
user_check = self._download_json( user_check = self._download_json(
@ -46,13 +46,13 @@ def _perform_login(self, username, password):
raise ExtractorError('Unable to login: Incorrect password', expected=True) raise ExtractorError('Unable to login: Incorrect password', expected=True)
raise ExtractorError('Unable to login') raise ExtractorError('Unable to login')
self._AUTH_TOKEN = login['auth_token'] self._API_HEADERS['Authorization'] = f'Bearer {login["auth_token"]}'
def _get_comments(self, video_id, limit=15): def _get_comments(self, video_id, limit=15):
comment_info = self._download_json( comment_info = self._download_json(
f'{self._API_BASE_URL}/api/videos/{video_id}/comments_v2', f'{self._API_BASE_URL}/api/videos/{video_id}/comments_v2',
video_id, fatal=False, note='Downloading comments API JSON', video_id, fatal=False, note='Downloading comments API JSON',
headers={'Origin': 'https://triller.co'}, query={'limit': limit}) or {} headers=self._API_HEADERS, query={'limit': limit}) or {}
if not comment_info.get('comments'): if not comment_info.get('comments'):
return return
for comment_dict in comment_info['comments']: for comment_dict in comment_info['comments']:
@ -210,9 +210,7 @@ def _real_extract(self, url):
f'{self._API_BASE_URL}/api/videos/{video_uuid}', f'{self._API_BASE_URL}/api/videos/{video_uuid}',
video_uuid, note='Downloading video info API JSON', video_uuid, note='Downloading video info API JSON',
errnote='Unable to download video info API JSON', errnote='Unable to download video info API JSON',
headers={ headers=self._API_HEADERS), ('videos', 0))
'Origin': 'https://triller.co',
}), ('videos', 0))
if not video_info: if not video_info:
raise ExtractorError('No video info found in API response') raise ExtractorError('No video info found in API response')
@ -242,19 +240,17 @@ class TrillerUserIE(TrillerBaseIE):
}] }]
def _real_initialize(self): def _real_initialize(self):
if not self._AUTH_TOKEN: if not self._API_HEADERS.get('Authorization'):
guest = self._download_json( guest = self._download_json(
f'{self._API_BASE_URL}/user/create_guest', f'{self._API_BASE_URL}/user/create_guest',
None, note='Creating guest session', data=b'', headers={ None, note='Creating guest session', data=b'', headers=self._API_HEADERS, query={
'Origin': 'https://triller.co',
}, query={
'platform': 'Web', 'platform': 'Web',
'app_version': '', 'app_version': '',
}) })
if not guest.get('auth_token'): if not guest.get('auth_token'):
raise ExtractorError('Unable to fetch required auth token for user extraction') raise ExtractorError('Unable to fetch required auth token for user extraction')
self._AUTH_TOKEN = guest['auth_token'] self._API_HEADERS['Authorization'] = f'Bearer {guest["auth_token"]}'
def _extract_video_list(self, username, user_id, limit=6): def _extract_video_list(self, username, user_id, limit=6):
query = { query = {
@ -266,10 +262,8 @@ def _extract_video_list(self, username, user_id, limit=6):
video_list = self._download_json( video_list = self._download_json(
f'{self._API_BASE_URL}/api/users/{user_id}/videos', f'{self._API_BASE_URL}/api/users/{user_id}/videos',
username, note=f'Downloading user video list page {page}', username, note=f'Downloading user video list page {page}',
errnote='Unable to download user video list', headers={ errnote='Unable to download user video list', headers=self._API_HEADERS,
'Authorization': f'Bearer {self._AUTH_TOKEN}', query=query)
'Origin': 'https://triller.co',
}, query=query)
except ExtractorError as e: except ExtractorError as e:
if isinstance(e.cause, json.JSONDecodeError) and e.cause.pos == 0: if isinstance(e.cause, json.JSONDecodeError) and e.cause.pos == 0:
retry.error = e retry.error = e
@ -291,10 +285,7 @@ def _real_extract(self, url):
user_info = self._check_user_info(self._download_json( user_info = self._check_user_info(self._download_json(
f'{self._API_BASE_URL}/api/users/by_username/{username}', f'{self._API_BASE_URL}/api/users/by_username/{username}',
username, note='Downloading user info', username, note='Downloading user info',
errnote='Failed to download user info', headers={ errnote='Failed to download user info', headers=self._API_HEADERS).get('user', {}))
'Authorization': f'Bearer {self._AUTH_TOKEN}',
'Origin': 'https://triller.co',
}).get('user', {}))
user_id = str_or_none(user_info.get('user_id')) user_id = str_or_none(user_info.get('user_id'))
videos = self._extract_video_list(username, user_id) videos = self._extract_video_list(username, user_id)