SESSDATA 登录检查

This commit is contained in:
yzqzss 2023-06-03 18:26:11 +08:00
parent b0badf78a6
commit 927325a062
2 changed files with 18 additions and 3 deletions

View File

@ -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}'

View File

@ -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: