Compare commits

...

2 Commits

Author SHA1 Message Date
c-basalt
a06ebc9bf7 login hint for CC subtitles 2023-10-15 19:45:11 -04:00
c-basalt
c2b46930b6 better entry generator 2023-10-15 19:01:28 -04:00

View File

@ -114,11 +114,14 @@ class BilibiliBaseIE(InfoExtractor):
}] }]
} }
video_info_json = self._download_json( subtitle_info = traverse_obj(self._download_json(
'https://api.bilibili.com/x/player/v2', video_id, 'https://api.bilibili.com/x/player/v2', video_id,
query={'aid': aid, 'cid': cid} if aid else {'bvid': video_id, 'cid': cid}, query={'aid': aid, 'cid': cid} if aid else {'bvid': video_id, 'cid': cid},
note=f'Extracting subtitle info {cid}') note=f'Extracting subtitle info {cid}'), ('data', 'subtitle'))
for s in traverse_obj(video_info_json, ('data', 'subtitle', 'subtitles', ...)): if not traverse_obj(subtitle_info, 'subtitles') and traverse_obj(subtitle_info, 'allow_submit'):
if not self._get_cookies('https://api.bilibili.com').get('SESSDATA'): # no login session cookie
self.report_warning(f'CC subtitles (if exist) are only visible when logged in. {self._login_hint()}')
for s in traverse_obj(subtitle_info, ('subtitles', ...)):
subtitles.setdefault(s['lan'], []).append({ subtitles.setdefault(s['lan'], []).append({
'ext': 'srt', 'ext': 'srt',
'data': self.json2srt(self._download_json(s['subtitle_url'], video_id)) 'data': self.json2srt(self._download_json(s['subtitle_url'], video_id))
@ -899,7 +902,7 @@ class BilibiliCheeseSeasonIE(BilibiliCheeseIE):
'view_count': int, 'view_count': int,
} }
}], }],
'skip': 'paid video in list', 'params': {'playlist_items': '1'},
}, { }, {
'url': 'https://www.bilibili.com/cheese/play/ss5918', 'url': 'https://www.bilibili.com/cheese/play/ss5918',
'info_dict': { 'info_dict': {
@ -908,11 +911,16 @@ class BilibiliCheeseSeasonIE(BilibiliCheeseIE):
'description': '帮普通人建立世界模型,降低人与人的沟通门槛', 'description': '帮普通人建立世界模型,降低人与人的沟通门槛',
}, },
'playlist_mincount': 5, 'playlist_mincount': 5,
'skip': 'paid video in list',
}] }]
def _get_cheese_entries(self, season_info): def _get_cheese_entries(self, season_info):
for ep_id in traverse_obj(season_info, ('episodes', lambda _, v: v['episode_can_view'], 'id')): for ep_id in traverse_obj(season_info, ('episodes', lambda _, v: v['episode_can_view'], 'id')):
yield self.url_result(f'https://www.bilibili.com/cheese/play/ep{ep_id}', BilibiliCheeseIE, str(ep_id)) yield {
**self._extract_episode(season_info, ep_id, self._HEADERS),
'extractor_key': BilibiliCheeseIE.ie_key(),
'extractor': 'BilibiliCheese',
}
def _real_extract(self, url): def _real_extract(self, url):
season_id = self._match_id(url) season_id = self._match_id(url)