aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLesmiscore <nao20010128@gmail.com>2022-11-05 19:18:15 +0900
committerGitHub <noreply@github.com>2022-11-05 19:18:15 +0900
commitda9a60ca0d9ed085ba3d60bf46e48bd2b53f1ecb (patch)
tree2870fa99ce2044cfe9c3bf4e972115a48e3ce3b5
parent0d113603ac2ccc869eb1d1b7419caed77f5f5d8a (diff)
downloadhypervideo-pre-da9a60ca0d9ed085ba3d60bf46e48bd2b53f1ecb.tar.lz
hypervideo-pre-da9a60ca0d9ed085ba3d60bf46e48bd2b53f1ecb.tar.xz
hypervideo-pre-da9a60ca0d9ed085ba3d60bf46e48bd2b53f1ecb.zip
[extractor/twitcasting] Fix `data-movie-playlist` extraction (#5453)
Authored by: Lesmiscore
-rw-r--r--yt_dlp/extractor/twitcasting.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/yt_dlp/extractor/twitcasting.py b/yt_dlp/extractor/twitcasting.py
index 0dbb97a36..9046f994d 100644
--- a/yt_dlp/extractor/twitcasting.py
+++ b/yt_dlp/extractor/twitcasting.py
@@ -1,3 +1,4 @@
+import base64
import itertools
import re
@@ -74,6 +75,16 @@ class TwitCastingIE(InfoExtractor):
'playlist_mincount': 2,
}]
+ def _parse_data_movie_playlist(self, dmp, video_id):
+ # attempt 1: parse as JSON directly
+ try:
+ return self._parse_json(dmp, video_id)
+ except ExtractorError:
+ pass
+ # attempt 2: decode reversed base64
+ decoded = base64.b64decode(dmp[::-1])
+ return self._parse_json(decoded, video_id)
+
def _real_extract(self, url):
uploader_id, video_id = self._match_valid_url(url).groups()
@@ -100,7 +111,7 @@ class TwitCastingIE(InfoExtractor):
video_js_data = try_get(
webpage,
- lambda x: self._parse_json(self._search_regex(
+ lambda x: self._parse_data_movie_playlist(self._search_regex(
r'data-movie-playlist=\'([^\']+?)\'',
x, 'movie playlist', default=None), video_id)['2'], list)