diff --git a/_biliarchiver_archive_bvid.py b/_biliarchiver_archive_bvid.py index e15ada6..5ebd4dc 100644 --- a/_biliarchiver_archive_bvid.py +++ b/_biliarchiver_archive_bvid.py @@ -34,9 +34,10 @@ async def new_get_subtitle_info(client: httpx.AsyncClient, bvid, cid): api.get_subtitle_info = new_get_subtitle_info -async def archive_bvid(d: DownloaderBilibili, bvid: str): +async def archive_bvid(d: DownloaderBilibili, bvid: str, logined: bool=False): assert d.hierarchy is True, 'hierarchy 必须为 True' # 为保持后续目录结构、文件命名的一致性 assert d.client.cookies.get('SESSDATA') is not None, 'sess_data 不能为空' # 开个大会员呗,能下 4k 呢。 + assert logined is True, '请先检查 SESSDATA 是否过期,再将 logined 设置为 True' # 防误操作 assert os.path.exists('biliarchiver.home'), '先创建 biliarchiver.home 文件' # 防误操作 videos_basepath = f'biliarchiver/videos/{bvid}' diff --git a/biliarchiver_archive_bvids.py b/biliarchiver_archive_bvids.py index 152c0e5..0982ad6 100644 --- a/biliarchiver_archive_bvids.py +++ b/biliarchiver_archive_bvids.py @@ -6,7 +6,7 @@ from _biliarchiver_archive_bvid import archive_bvid from bilix.sites.bilibili.downloader import DownloaderBilibili from rich.console import Console - +from httpx import Client from rich.traceback import install install() @@ -33,11 +33,16 @@ def main(): d = DownloaderBilibili(video_concurrency=tasks_limit, part_concurrency=1, hierarchy=True, sess_data=args.sess_data, ) + + logined = is_login(Client(cookies=d.client.cookies, headers=d.client.headers)) + if not logined: + return + d.progress.start() for bvid in bvids: while len(asyncio.all_tasks(loop)) > tasks_limit: loop.run_until_complete(asyncio.sleep(0.01)) - task = loop.create_task(archive_bvid(d, bvid)) + task = loop.create_task(archive_bvid(d, bvid, logined=logined)) @@ -46,6 +51,15 @@ def get_sess_data(): sess_data = f.read().strip() return sess_data +def is_login(cilent: Client) -> bool: + r = cilent.get('https://api.bilibili.com/x/member/web/account') + r.raise_for_status() + nav_json = r.json() + if nav_json['code'] == 0: + print('用户登录成功') + return True + print('未登录/SESSDATA无效/过期') + return False if __name__ == '__main__': try: