63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
try:
|
|
from Provider import SessionProvider, SongStatus, AccountType
|
|
except:
|
|
from Extensions.Provider import SessionProvider, SongStatus, AccountType
|
|
import httpx
|
|
from functools import lru_cache
|
|
import re
|
|
from enum import Enum
|
|
from bilibili_api import user, login_func, sync, login, Credential
|
|
from pyzbar import pyzbar
|
|
from PIL import Image
|
|
import qrcode
|
|
import time
|
|
|
|
class BilibiliSession(SessionProvider):
|
|
sessionKey = None
|
|
session = None
|
|
providerName = "Bilibili"
|
|
URLKeyword = ["b23.tv", "bilibili.com", "bilibili.tv"]
|
|
accountType = AccountType.ACCOUNT_NOLOGIN
|
|
|
|
def login(self) -> dict:
|
|
status, self.session = login_func.check_qrcode_events(self.sessionKey)
|
|
print(status)
|
|
if status == login_func.QrCodeLoginEvents.SCAN:
|
|
return {"status": "400", "msg": "请扫描二维码"}, 400
|
|
elif status == login_func.QrCodeLoginEvents.CONF:
|
|
return {"status": "400", "msg": "请在手机上确认登录"}, 400
|
|
elif status == login_func.QrCodeLoginEvents.TIMEOUT:
|
|
return {"status": "400", "msg": "二维码已过期,请重新获取"}, 400
|
|
elif status == login_func.QrCodeLoginEvents.DONE:
|
|
self.status.cache_clear()
|
|
print("success!")
|
|
return {"status": "200", "msg": "登录成功"}, 200
|
|
else:
|
|
return {"status": "400", "msg": "未知错误"}, 400
|
|
|
|
@lru_cache(maxsize=8)
|
|
def status(self) -> dict:
|
|
return sync(user.get_self_info(self.session))
|
|
|
|
def userStatus(self) -> dict:
|
|
return self.status()
|
|
|
|
def logout(self) -> dict:
|
|
return {"status": 201, "msg": "无法登出,直接换帐号就好了"}, 201
|
|
|
|
def qrcode(self):
|
|
_session = login.update_qrcode_data()
|
|
loginURL = _session["url"]
|
|
self.sessionKey = _session["qrcode_key"]
|
|
qrcode.make(loginURL).save("/tmp/qrcode.png")
|
|
return loginURL
|
|
|
|
if __name__ == "__main__":
|
|
bisess = BilibiliSession()
|
|
print(bisess.qrcode())
|
|
while(True):
|
|
if bisess.login()[1] == 200:
|
|
break
|
|
time.sleep(2)
|
|
print(bisess.userStatus())
|