mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2025-01-30 22:59:48 +00:00
Resurrect TikTokUserIE
This commit is contained in:
parent
09c0980568
commit
b428754fa9
@ -127,11 +127,6 @@ class TikTokIE(TikTokBaseIE):
|
|||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
# dummy request to set cookies
|
|
||||||
self._request_webpage(
|
|
||||||
HEADRequest(url), video_id,
|
|
||||||
note=False, errnote='Could not send HEAD request to %s' % url,
|
|
||||||
fatal=False)
|
|
||||||
webpage = self._download_webpage(url, video_id)
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
|
||||||
page_props = self._parse_json(self._search_regex(
|
page_props = self._parse_json(self._search_regex(
|
||||||
@ -162,7 +157,6 @@ class TikTokUserIE(TikTokBaseIE):
|
|||||||
},
|
},
|
||||||
'playlist_mincount': 24,
|
'playlist_mincount': 24,
|
||||||
}]
|
}]
|
||||||
_WORKING = False
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def suitable(cls, url):
|
def suitable(cls, url):
|
||||||
@ -170,10 +164,38 @@ class TikTokUserIE(TikTokBaseIE):
|
|||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
user_id = self._match_id(url)
|
user_id = self._match_id(url)
|
||||||
|
|
||||||
|
webpage = self._download_webpage(url, user_id)
|
||||||
|
page_props = self._parse_json(self._search_regex(
|
||||||
|
r'''(?s)<script\s[^>]*?\bid\s*=\s*(?P<q>"|'|\b)sigi-persisted-data(?P=q)[^>]*>[^=]*=\s*(?P<json>{.+?})\s*(?:;[^<]+)?</script''',
|
||||||
|
webpage, 'sigi data', default='{}', group='json'), user_id)
|
||||||
|
user_data = try_get(page_props, lambda x: x['UserModule']['users'], dict)
|
||||||
|
entries = []
|
||||||
|
if user_data:
|
||||||
|
num_id = try_get(
|
||||||
|
user_data.values(),
|
||||||
|
lambda x: [user['id'] for user in x if user['uniqueId'] == user_id][0],
|
||||||
|
compat_str)
|
||||||
|
item_data = try_get(page_props, lambda x: x['ItemModule'], dict)
|
||||||
|
if item_data:
|
||||||
|
item_data = item_data.values()
|
||||||
|
for data in item_data or []:
|
||||||
|
if data.get('privateItem'):
|
||||||
|
continue
|
||||||
|
item = self._extract_video(data, user_id)
|
||||||
|
if item:
|
||||||
|
entries.append(item)
|
||||||
|
result = entries and self.playlist_result(entries, num_id)
|
||||||
|
if not result:
|
||||||
|
item_data = try_get(page_props, lambda x: x['ItemList']['user-post']['list'], list)
|
||||||
|
result = self.playlist_from_matches(item_data, playlist_id=num_id, getter=lambda m: 'tiktok:%s' % (m, ))
|
||||||
|
if result:
|
||||||
|
result['display_id'] = user_id
|
||||||
|
return result
|
||||||
|
|
||||||
data = self._download_json(
|
data = self._download_json(
|
||||||
'https://m.tiktok.com/h5/share/usr/list/%s/' % user_id, user_id,
|
'https://m.tiktok.com/h5/share/usr/list/%s/' % user_id, user_id,
|
||||||
query={'_signature': '_'})
|
query={'_signature': '_'})
|
||||||
entries = []
|
|
||||||
for aweme in data['aweme_list']:
|
for aweme in data['aweme_list']:
|
||||||
try:
|
try:
|
||||||
entry = self._extract_video(aweme)
|
entry = self._extract_video(aweme)
|
||||||
@ -181,4 +203,5 @@ class TikTokUserIE(TikTokBaseIE):
|
|||||||
continue
|
continue
|
||||||
entry['extractor_key'] = TikTokIE.ie_key()
|
entry['extractor_key'] = TikTokIE.ie_key()
|
||||||
entries.append(entry)
|
entries.append(entry)
|
||||||
|
|
||||||
return self.playlist_result(entries, user_id)
|
return self.playlist_result(entries, user_id)
|
||||||
|
Loading…
Reference in New Issue
Block a user