diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-06-20 03:03:19 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-06-20 03:05:46 +0530 |
commit | 8072ef2bbd1721e4c79156b422e4fccc1e062853 (patch) | |
tree | c1ae7c55a5167d0d3ec3f5e4ab8fa8618fa37ed8 /yt_dlp/extractor/bilibili.py | |
parent | 40268a79745695a51846700c6af5d11e9a4e6e2a (diff) | |
download | hypervideo-pre-8072ef2bbd1721e4c79156b422e4fccc1e062853.tar.lz hypervideo-pre-8072ef2bbd1721e4c79156b422e4fccc1e062853.tar.xz hypervideo-pre-8072ef2bbd1721e4c79156b422e4fccc1e062853.zip |
[extractor/BiliIntl] Fix metadata extraction
Closes #4116
Diffstat (limited to 'yt_dlp/extractor/bilibili.py')
-rw-r--r-- | yt_dlp/extractor/bilibili.py | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/yt_dlp/extractor/bilibili.py b/yt_dlp/extractor/bilibili.py index ead0dd88b..2912e0cad 100644 --- a/yt_dlp/extractor/bilibili.py +++ b/yt_dlp/extractor/bilibili.py @@ -947,12 +947,11 @@ class BiliIntlIE(BiliIntlBaseIE): video_id = ep_id or aid webpage = self._download_webpage(url, video_id) # Bstation layout - initial_data = self._parse_json(self._search_regex( - r'window\.__INITIAL_(?:DATA|STATE)__\s*=\s*({.+?});', webpage, - 'preload state', default='{}'), video_id, fatal=False) or {} - video_data = ( - traverse_obj(initial_data, ('OgvVideo', 'epDetail'), expected_type=dict) - or traverse_obj(initial_data, ('UgcVideo', 'videoData'), expected_type=dict) or {}) + initial_data = ( + self._search_json(r'window\.__INITIAL_(?:DATA|STATE)__\s*=', webpage, 'preload state', video_id, default={}) + or self._search_nuxt_data(webpage, video_id, '__initialState', fatal=False, traverse=None)) + video_data = traverse_obj( + initial_data, ('OgvVideo', 'epDetail'), ('UgcVideo', 'videoData'), ('ugc', 'archive'), expected_type=dict) if season_id and not video_data: # Non-Bstation layout, read through episode list @@ -960,7 +959,7 @@ class BiliIntlIE(BiliIntlBaseIE): video_data = traverse_obj(season_json, ('sections', ..., 'episodes', lambda _, v: str(v['episode_id']) == ep_id), expected_type=dict, get_all=False) - return self._extract_video_info(video_data, ep_id=ep_id, aid=aid) + return self._extract_video_info(video_data or {}, ep_id=ep_id, aid=aid) class BiliIntlSeriesIE(BiliIntlBaseIE): |