]> jfr.im git - yt-dlp.git/commitdiff
[TikTok] Fallback to feed API endpoint (#2142)
authorMinePlayersPE <redacted>
Tue, 28 Dec 2021 02:38:23 +0000 (09:38 +0700)
committerGitHub <redacted>
Tue, 28 Dec 2021 02:38:23 +0000 (08:08 +0530)
Authored by: MinePlayersPE
Workaround for #2133

yt_dlp/extractor/tiktok.py

index 0cd82b56028691bfd38441d57dff11e74b348f59..c34235e960d39a9ce8db681951982dd6ad89b04c 100644 (file)
@@ -348,10 +348,18 @@ class TikTokIE(TikTokBaseIE):
     }]
 
     def _extract_aweme_app(self, aweme_id):
-        aweme_detail = self._call_api('aweme/detail', {'aweme_id': aweme_id}, aweme_id,
-                                      note='Downloading video details', errnote='Unable to download video details').get('aweme_detail')
-        if not aweme_detail:
-            raise ExtractorError('Video not available', video_id=aweme_id)
+        try:
+            aweme_detail = self._call_api('aweme/detail', {'aweme_id': aweme_id}, aweme_id,
+                                          note='Downloading video details', errnote='Unable to download video details').get('aweme_detail')
+            if not aweme_detail:
+                raise ExtractorError('Video not available', video_id=aweme_id)
+        except ExtractorError as e:
+            self.report_warning(f'{e}; Retrying with feed workaround')
+            feed_list = self._call_api('feed', {'aweme_id': aweme_id}, aweme_id,
+                                       note='Downloading video feed', errnote='Unable to download video feed').get('aweme_list') or []
+            aweme_detail = next(aweme for aweme in feed_list if str(aweme.get('aweme_id')) == aweme_id)
+            if not aweme_detail:
+                raise ExtractorError('Unable to find video in feed', video_id=aweme_id)
         return self._parse_aweme_video_app(aweme_detail)
 
     def _real_extract(self, url):