From 830fcde8d58927d658910e8f71f70e5f51ad2306 Mon Sep 17 00:00:00 2001 From: Junyi Lou <15688661+junyilou@users.noreply.github.com> Date: Sat, 16 Aug 2025 18:12:39 +0800 Subject: [PATCH] [ie/bilibili] URL Redirect (yt-dlp#13924) --- yt_dlp/extractor/bilibili.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/yt_dlp/extractor/bilibili.py b/yt_dlp/extractor/bilibili.py index d00ac63176..b7696e93e2 100644 --- a/yt_dlp/extractor/bilibili.py +++ b/yt_dlp/extractor/bilibili.py @@ -644,7 +644,19 @@ class BiliBiliIE(BilibiliBaseIE): headers['Referer'] = url - initial_state = self._search_json(r'window\.__INITIAL_STATE__\s*=', webpage, 'initial state', video_id) + initial_state = self._search_json(r'window\.__INITIAL_STATE__\s*=', webpage, 'initial state', video_id, default=None) + if not initial_state: + query = {} + if groups := re.search(r"[bB][vV](?P[^/?#&]+)", url): + query["bvid"] = f"BV{groups.group("id")}" + elif groups := re.search(r"[aA][vV](?P[^/?#&]+)", url): + query["aid"] = groups.group("id") + if query: + ep_url = traverse_obj( + self._download_json('https://api.bilibili.com/x/web-interface/wbi/view/detail', 'vid', + query=self._sign_wbi(query, 'vid'), headers=headers), ('data', 'View', 'redirect_url')) + if ep_url and BiliBiliBangumiIE._match_valid_url(ep_url): + return BiliBiliBangumiIE(self._downloader).extract(ep_url) if traverse_obj(initial_state, ('error', 'trueCode')) == -403: self.raise_login_required()