Files
GalaxyMusicHall_CTF/Extensions/Bilibili.py
T
2024-05-26 13:25:28 +08:00

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())