网易云音乐登录修复

This commit is contained in:
SlyAimer 2025-01-15 00:28:26 +08:00
parent 6bd163a15b
commit 243159939f
4 changed files with 58 additions and 51 deletions

View file

@ -7,6 +7,7 @@ nonebot2[websockets]
sqlalchemy~=2.0.34 sqlalchemy~=2.0.34
autopep8 autopep8
graiax-silkcoder graiax-silkcoder
graiax-silkcoder[ffempeg]
Crypto Crypto
fake_useragent fake_useragent
pycryptodome pycryptodome

View file

@ -76,6 +76,7 @@ def encSecKey():
save_path = os.getcwd()+'/src/music/netease_music' save_path = os.getcwd()+'/src/music/netease_music'
qrcode_path = os.getcwd()+'/src/music'
# 判断cookie是否有效 # 判断cookie是否有效
@ -85,12 +86,18 @@ def netease_cloud_music_is_login(session):
except Exception: except Exception:
pass pass
csrf_token = session.cookies.get('__csrf') csrf_token = session.cookies.get('__csrf')
c = str({'csrf_token': csrf_token}) if csrf_token is None:
return session, False
else:
try: try:
loginurl = session.post('https://music.163.com/weapi/w/nuser/account/get?csrf_token={}'.format(csrf_token),data={'params': params(None), 'encSecKey': encSecKey()}, headers=headers).json() loginurl = session.post(f'https://music.163.com/weapi/w/nuser/account/get?csrf_token={csrf_token}',data={'params': params(None), 'encSecKey': encSecKey()}, headers=headers).json()
print(loginurl)
print(loginurl['code'])
if '200' in str(loginurl['code']): if '200' in str(loginurl['code']):
print('登录成功')
return session, True return session, True
else: else:
print('登录失败')
return session, False return session, False
except BaseException: except BaseException:
return session, False return session, False
@ -120,16 +127,8 @@ def create_qr_code(unikey):
img = qr.make_image() img = qr.make_image()
a = BytesIO() a = BytesIO()
img.save(a, 'png') img.save(a, 'png')
png = a.getvalue() img.save(os.path.join(qrcode_path, 'qrcode.png'))
# 将字节数据转换为图像 return qrcode_path + '/qrcode.png'
img = Image.open(BytesIO(png))
# 保存图像到本地文件
img.save(save_path,'qrcode.png')
a.close()
return os.getcwd()+'/'+save_path+'/qrcode.png'
# # 打开二维码进行扫码操作
# t = showpng(png)
# t.start()
# 检查二维码状态是否被扫描 # 检查二维码状态是否被扫描

View file

@ -1,4 +1,4 @@
import random
from nonebot.rule import Rule, to_me from nonebot.rule import Rule, to_me
from nonebot import on_message from nonebot import on_message
from nonebot.adapters.qq import Message from nonebot.adapters.qq import Message
@ -17,4 +17,12 @@ rule = Rule(check_value_in_menu)
check = on_message(rule=to_me() & rule ,block=True) check = on_message(rule=to_me() & rule ,block=True)
@check.handle() @check.handle()
async def check(bot: Bot, event: Event): async def check(bot: Bot, event: Event):
await bot.send(message=Message("是什么呢?猫猫没有识别到,喵~"+'\n'+"(๑>ڡ<)☆ 请注意命令后要加空格哦~"),event=event) await bot.send(message=Message(random.choice(text_list)),event=event)
text_list = [
"是什么呢?猫猫没有识别到,喵~"+'\n'+"(๑>ڡ<)☆ 给个准信,别让我瞎猜",
"是想让我干嘛呢?猫猫一头雾水,喵~" + '\n' + "(๑•̀ㅂ•́)و✧ 直接跟我说,别这么含蓄,喵~",
"是啥意思呀?猫猫完全没搞懂,喵~" + '\n' + "(๑・.・๑) 别折腾我啦,说明白,喵~",
"是特殊信号?猫猫听不懂,喵~" + '\n' + "(๑・̀︶・́)و 下个明确指令,喵~",
"难道是新指令?猫猫一脸茫然,喵~" + '\n' + "(๑>ڡ<)☆ 说详细点,别这么隐晦,喵~",
]

View file

@ -1,6 +1,8 @@
import pickle import pickle
import time import time
from pathlib import Path from pathlib import Path
from lazy_object_proxy.utils import await_
from nonebot import on_command from nonebot import on_command
from nonebot.rule import to_me from nonebot.rule import to_me
from nonebot.adapters.qq import MessageSegment,MessageEvent from nonebot.adapters.qq import MessageSegment,MessageEvent
@ -11,7 +13,34 @@ music = on_command("点歌", rule=to_me(), priority=10, block=True)
async def handle_function(msg: MessageEvent): async def handle_function(msg: MessageEvent):
keyword = msg.get_plaintext().replace("/点歌", "").strip(" ") keyword = msg.get_plaintext().replace("/点歌", "").strip(" ")
#获取登录信息 可以获取更换高音质 #获取登录信息 可以获取更换高音质
session = cloud_music_login() session = requests.session()
if not os.path.exists('cloud_music_cookies.cookie'):
with open('cloud_music_cookies.cookie', 'wb') as f:
pickle.dump(session.cookies, f)
# 读取 cookie
session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
session, status = netease_cloud_music_is_login(session)
if not status:
await music.send("登录失效,请联系管理员进行登录")
unikey = get_qr_key(session)
path = create_qr_code(unikey)
"""是否要发送到QQ上面登录 """
# await music.send(MessageSegment.file_image(Path(path)))
while True:
code = check_qr_code(unikey, session)
if '801' in str(code):
print('二维码未失效,请扫码!')
elif '802' in str(code):
print('已扫码,请确认!')
elif '803' in str(code):
print('已确认,登入成功!')
break
else:
print('其他:', code)
time.sleep(2)
with open('cloud_music_cookies.cookie', 'wb') as f:
pickle.dump(session.cookies, f)
#搜索歌曲 #搜索歌曲
song_id,song_name,singer,song_url = netease_music_search(keyword,session) song_id,song_name,singer,song_url = netease_music_search(keyword,session)
if song_id is None: if song_id is None:
@ -26,35 +55,5 @@ async def handle_function(msg: MessageEvent):
await music.finish() await music.finish()
def cloud_music_login():
#判断返回cookie是否有效
session = requests.session()
if not os.path.exists('cloud_music_cookies.cookie'):
with open('cloud_music_cookies.cookie', 'wb') as f:
pickle.dump(session.cookies, f)
# 读取 cookie
session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
session, status = netease_cloud_music_is_login(session)
if not status:
unikey = get_qr_key(session)
path = create_qr_code(unikey)
music.send(MessageSegment.file_image(Path(path)))
while True:
code = check_qr_code(unikey,session)
if '801' in str(code):
print('二维码未失效,请扫码!')
elif '802' in str(code):
print('已扫码,请确认!')
elif '803' in str(code):
print('已确认,登入成功!')
break
else:
print('其他:', code)
time.sleep(2)
with open('cloud_music_cookies.cookie', 'wb') as f:
pickle.dump(session.cookies, f)
return session