diff --git a/BiliDriveEx/__main__.py b/BiliDriveEx/__main__.py index 3f9494e6694e92b96cbe2401af9e74204b7b5ba2..46ad92baa6f1d78a7375e62156e2638c7e5d40f4 100644 --- a/BiliDriveEx/__main__.py +++ b/BiliDriveEx/__main__.py @@ -46,7 +46,7 @@ def login_handle(args): if api.login(username=args.username, password=args.password): api.get_user_info() with open(os.path.join(bundle_dir, "cookies.json"), "w", encoding="utf-8") as f: - f.write(json.dumps(bilibili.get_cookies(), ensure_ascii=False, indent=2)) + f.write(json.dumps(api.get_cookies(), ensure_ascii=False, indent=2)) def upload_handle(args): def core(index, block): diff --git a/BiliDriveEx/bilibili.py b/BiliDriveEx/bilibili.py index d89cbdb8fab166d6a0d0dd1f77547a83820a085f..fc8b2b1a2362e1f36ea8c8da5e01ac3f3db7802d 100644 --- a/BiliDriveEx/bilibili.py +++ b/BiliDriveEx/bilibili.py @@ -18,11 +18,12 @@ class Bilibili: default_url = lambda self, sha1: f"http://i0.hdslb.com/bfs/album/{sha1}.png" meta_string = lambda self, url: ("bdex://" + re.findall(r"[a-fA-F0-9]{40}", url)[0]) if re.match(r"^http(s?)://i0.hdslb.com/bfs/album/[a-fA-F0-9]{40}.png$", url) else url + get_cookies = lambda self: self._session.cookies.get_dict(domain=".bilibili.com") + get_uid = lambda self: self.get_cookies().get("DedeUserID", "") + def __init__(self): self._session = requests.Session() self._session.headers.update({'User-Agent': "Mozilla/5.0 BiliDroid/5.51.1 (bbcallen@gmail.com)"}) - self.get_cookies = lambda: self._session.cookies.get_dict(domain=".bilibili.com") - self.get_uid = lambda: self.get_cookies().get("DedeUserID", "") self.username = "" self.password = "" self.info = { @@ -62,29 +63,32 @@ class Bilibili: sign_hash.update(f"{param}{salt}".encode()) return sign_hash.hexdigest() + + def get_key(self): + url = f"https://passport.bilibili.com/api/oauth2/getKey" + payload = { + 'appkey': Bilibili.app_key, + 'sign': self.calc_sign(f"appkey={Bilibili.app_key}"), + } + while True: + res = request_retry("post", url, data=payload).json() + if res and res['code'] == 0: + return { + 'key_hash': res['data']['hash'], + 'pub_key': rsa.PublicKey.load_pkcs1_openssl_pem(res['data']['key'].encode()), + } + else: + time.sleep(1) + # 登录 def login(self, username, password): - def get_key(): - url = f"https://passport.bilibili.com/api/oauth2/getKey" - payload = { - 'appkey': Bilibili.app_key, - 'sign': self.calc_sign(f"appkey={Bilibili.app_key}"), - } - while True: - response = self._requests("post", url, data=payload) - if response and response.get("code") == 0: - return { - 'key_hash': response['data']['hash'], - 'pub_key': rsa.PublicKey.load_pkcs1_openssl_pem(response['data']['key'].encode()), - } - else: - time.sleep(1) + self.username = username self.password = password while True: - key = get_key() + key = self.get_key() key_hash, pub_key = key['key_hash'], key['pub_key'] url = f"https://passport.bilibili.com/api/v2/oauth2/login" param = f"appkey={Bilibili.app_key}&password={parse.quote_plus(base64.b64encode(rsa.encrypt(f'{key_hash}{self.password}'.encode(), pub_key)))}&username={parse.quote_plus(self.username)}"