diff options
author | Lesmiscore <nao20010128@gmail.com> | 2022-11-05 19:18:15 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-05 19:18:15 +0900 |
commit | da9a60ca0d9ed085ba3d60bf46e48bd2b53f1ecb (patch) | |
tree | 2870fa99ce2044cfe9c3bf4e972115a48e3ce3b5 | |
parent | 0d113603ac2ccc869eb1d1b7419caed77f5f5d8a (diff) | |
download | hypervideo-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.py | 13 |
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) |