From fabb27fcea6bed4f751bd95d7301067452b1e21e Mon Sep 17 00:00:00 2001 From: "Lesmiscore (The Hatsune Daishi)" Date: Wed, 12 Jan 2022 00:07:51 +0900 Subject: [PATCH] [twitcasting] Throw proper error for login-only streams (#2290) Closes #2289 Authored by: Lesmiscore --- yt_dlp/extractor/twitcasting.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/yt_dlp/extractor/twitcasting.py b/yt_dlp/extractor/twitcasting.py index 3acf1b118..ef1e871cf 100644 --- a/yt_dlp/extractor/twitcasting.py +++ b/yt_dlp/extractor/twitcasting.py @@ -14,6 +14,7 @@ parse_duration, qualities, str_to_int, + traverse_obj, try_get, unified_timestamp, urlencode_postdata, @@ -96,12 +97,17 @@ def _real_extract(self, url): 'Downloading live info', fatal=False) is_live = 'data-status="online"' in webpage + + if not traverse_obj(stream_server_data, 'llfmp4') and is_live: + raise ExtractorError('You must be logged in to watch.', expected=True) + formats = [] if is_live and not m3u8_url: m3u8_url = 'https://twitcasting.tv/%s/metastream.m3u8' % uploader_id if is_live and has_websockets and stream_server_data: qq = qualities(['base', 'mobilesource', 'main']) - for mode, ws_url in stream_server_data['llfmp4']['streams'].items(): + streams = traverse_obj(stream_server_data, ('llfmp4', 'streams')) or {} + for mode, ws_url in streams.items(): formats.append({ 'url': ws_url, 'format_id': 'ws-%s' % mode,