整合文件夹名称

This commit is contained in:
SlyAimer 2025-02-06 16:00:21 +08:00
parent c59cb5214a
commit 6183b91908
37 changed files with 54 additions and 214 deletions

2
.gitignore vendored
View file

@ -8,7 +8,7 @@ chat_bot.db-wal
chat_bot.db-shm chat_bot.db-shm
cloud_music_cookies.cookie cloud_music_cookies.cookie
chat_history.json chat_history.json
/src/music/qrcode.png /src/clover_music/qrcode.png
/chat.db /chat.db
/chat_bot.db-wal /chat_bot.db-wal
/chat_bot.db-shm /chat_bot.db-shm

View file

@ -168,7 +168,7 @@ python bot.by
#### 📲所有指令 #### 📲所有指令
机器人的指令列表在[<B>src/qq_plugins/check.py</B>](src/qq_plugins/check.py)中,有如下指令: 机器人的指令列表在[<B>src/qq_plugins/check.py</B>](src/plugins/check.py)中,有如下指令:
```python ```python
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办", "/开启ai", "/关闭ai", "/cf", "/管理员确认"] menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办", "/开启ai", "/关闭ai", "/cf", "/管理员确认"]
@ -207,7 +207,7 @@ admin_list
group_list group_list
``` ```
初始化相关脚本存放在 [<b>src/my_sqlite/data_init</b>](src/my_sqlite/data_init) 目录下。 初始化相关脚本存放在 [<b>src/my_sqlite/data_init</b>](src/clover_sqlite/data_init) 目录下。
每次启动机器人程序会自动检查上述8张表是否存在有表缺失则会在数据库中自动创建对应的表。 每次启动机器人程序会自动检查上述8张表是否存在有表缺失则会在数据库中自动创建对应的表。
@ -221,17 +221,17 @@ group_list
机器人支持[<b>SMMS图床</b>](https://sm.ms/)、[<b>聚合图床</b>](https://www.superbed.cn/)、从**本地**发送图片。 机器人支持[<b>SMMS图床</b>](https://sm.ms/)、[<b>聚合图床</b>](https://www.superbed.cn/)、从**本地**发送图片。
获取图片的方法统一编写在[<B>src/image/get_image.py</B>](src/image/get_image.py)下。 获取图片的方法统一编写在[<B>src/image/get_image.py</B>](src/clover_image/get_image.py)下。
##### 使用: ##### 使用:
首先找到[<b>src/image/config/image.yaml</b>](src/image/config/image.yaml) 首先找到[<b>src/image/config/image.yaml</b>](src/clover_image/config/image.yaml)
```yaml ```yaml
image: image:
app_id: "<KEY>" app_id: "<KEY>"
image_local_qq_image_path: "src/image/qq_image" image_local_qq_image_path: "src/clover_image/qq_image"
image_local_path: "src/image/MaoYuNa" image_local_path: "src/clover_image/MaoYuNa"
#SMMS图床相关配置 #SMMS图床相关配置
smms_token: "<KEY>" # sm.ms图床的token smms_token: "<KEY>" # sm.ms图床的token
smms_image_upload_history: "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址 smms_image_upload_history: "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址
@ -242,7 +242,7 @@ image:
将你的机器人app_idsmms图床Token和聚合图床Token替换上述<i>\<KEY></i>(可以根据自身需求选填) 将你的机器人app_idsmms图床Token和聚合图床Token替换上述<i>\<KEY></i>(可以根据自身需求选填)
之后在[<B>get_image.py</B>](src/image/get_image.py)中找到对应的方法,根据自身需求调用。 之后在[<B>get_image.py</B>](src/clover_image/get_image.py)中找到对应的方法,根据自身需求调用。
<br> <br>
@ -266,7 +266,7 @@ image:
登录失效,请联系管理员进行登录 登录失效,请联系管理员进行登录
``` ```
此时会在[<b>src/music</b>](src/music)目录下生成一张<i><b>qrcode.png</b></i>,您需要使用手机端网易云音乐**扫码**该二维码,登录您的网易云账号。 此时会在[<b>src/music</b>](src/clover_music)目录下生成一张<i><b>qrcode.png</b></i>,您需要使用手机端网易云音乐**扫码**该二维码,登录您的网易云账号。
<br> <br>
@ -276,7 +276,7 @@ image:
#### 💡使用第三方语言模型 #### 💡使用第三方语言模型
打开[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/ai_chat/config/chat_ai.yaml) 打开[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/clover_openai/config/chat_ai.yaml)
```yaml ```yaml
chat_ai: chat_ai:
@ -305,7 +305,7 @@ chat_ai:
###### 1.注册为管理员<a id="admin_control"></a> ###### 1.注册为管理员<a id="admin_control"></a>
在[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/ai_chat/config/chat_ai.yaml)内,找到 在[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/clover_openai/config/chat_ai.yaml)内,找到
```yaml ```yaml
admin_password: "<key>" # 设置管理员认证密码 admin_password: "<key>" # 设置管理员认证密码

2
bot.py
View file

@ -9,7 +9,7 @@ driver.register_adapter(QQAdapter) # 注册QQ适配器
nonebot.load_from_toml("pyproject.toml") nonebot.load_from_toml("pyproject.toml")
logger.add("src/resources/log/error.log", level="ERROR", format=default_format, rotation="1 week") logger.add("src/resources/log/error.log", level="ERROR", format=default_format, rotation="1 week")
from src.my_sqlite.data_init.db_connect import disconnect, init from src.clover_sqlite.data_init.db_connect import disconnect, init
driver.on_startup(init) driver.on_startup(init)
driver.on_shutdown(disconnect) driver.on_shutdown(disconnect)

View file

@ -10,5 +10,5 @@ adapters = [
{ name = "QQ", module_name = "nonebot.adapters.qq" } { name = "QQ", module_name = "nonebot.adapters.qq" }
] ]
plugins = [] plugins = []
plugin_dirs = ["src/qq_plugins"] plugin_dirs = ["src/plugins"]
builtin_plugins = ["echo"] builtin_plugins = ["echo"]

View file

@ -25,10 +25,10 @@ def djs(js):
break break
return jst return jst
def get_login_js(): def get_login_js():
return djs('src/music/cloud_music/jsdm.js') return djs('src/clover_music/cloud_music/jsdm.js')
def get_param_js(): def get_param_js():
return djs('src/music/cloud_music/param.js') return djs('src/clover_music/cloud_music/param.js')
# 获取ptqrtoken # 获取ptqrtoken
def ptqrtoken(qrsign): def ptqrtoken(qrsign):

View file

@ -9,7 +9,7 @@ from io import BytesIO
from random import Random from random import Random
from Crypto.Cipher import AES from Crypto.Cipher import AES
from graiax import silkcoder from graiax import silkcoder
import src.music.cloud_music.agent as agent import src.clover_music.cloud_music.agent as agent
requests.packages.urllib3.disable_warnings() requests.packages.urllib3.disable_warnings()
@ -60,8 +60,8 @@ def get_music(id):
""" """
使用二维码登录网易云音乐需要先获取二维码的key然后使用该key生成二维码扫描二维码登录最后通过登录接口 返回cookie 保存起来 使用二维码登录网易云音乐需要先获取二维码的key然后使用该key生成二维码扫描二维码登录最后通过登录接口 返回cookie 保存起来
""" """
save_path = os.getcwd()+'/src/music/netease_music' save_path = os.getcwd()+'/src/clover_music/netease_music'
qrcode_path = os.getcwd()+'/src/music' qrcode_path = os.getcwd()+'/src/clover_music'
# 判断cookie是否有效 # 判断cookie是否有效

View file

@ -1,6 +1,6 @@
import openai import openai
import requests import requests
from src.my_sqlite.models.chat import GroupChatRole from src.clover_sqlite.models.chat import GroupChatRole
from src.configs.api_config import v3url, v3key, deepseek_url, deepseek_key from src.configs.api_config import v3url, v3key, deepseek_url, deepseek_key
openai.api_key = deepseek_key openai.api_key = deepseek_key

View file

@ -31,7 +31,7 @@ def todo_init():
""" """
def execute_init_file3(): def execute_init_file3():
# 拼接文件的完整路径 # 拼接文件的完整路径
file_path = os.getcwd() + "/src/my_sqlite/data_init/todo_init.py" file_path = os.getcwd() + "/src/clover_sqlite/data_init/todo_init.py"
init_file_path = os.path.join(os.path.dirname(__file__), file_path) init_file_path = os.path.join(os.path.dirname(__file__), file_path)
try: try:
# 执行初始化文件 # 执行初始化文件

View file

@ -1,7 +1,7 @@
import time import time
from tortoise import fields from tortoise import fields
from typing_extensions import Self from typing_extensions import Self
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
class BanConsole(Model): class BanConsole(Model):
id = fields.IntField(primary_key=True, generated=True, auto_increment=True) id = fields.IntField(primary_key=True, generated=True, auto_increment=True)

View file

@ -2,7 +2,7 @@ from typing import Any
from tortoise import fields from tortoise import fields
from typing_extensions import Self from typing_extensions import Self
from tortoise.fields import JSONField from tortoise.fields import JSONField
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
class ChatRole(Model): class ChatRole(Model):

View file

@ -2,7 +2,7 @@ import random
from datetime import datetime from datetime import datetime
from tortoise import fields from tortoise import fields
from typing_extensions import Self from typing_extensions import Self
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
class QrFortune(Model): class QrFortune(Model):
""" """

View file

@ -3,7 +3,7 @@ import random
from datetime import datetime from datetime import datetime
from tortoise import fields from tortoise import fields
from typing_extensions import Self from typing_extensions import Self
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
from src.configs.path_config import tarots_img_path from src.configs.path_config import tarots_img_path
@ -88,7 +88,7 @@ class MajorArcanaLog(Model):
'ints': ints, 'ints': ints,
'name': model.name, 'name': model.name,
'meaning': meaning, 'meaning': meaning,
'image': image, 'clover_image': image,
'create_time':datetime.now().date() 'create_time':datetime.now().date()
} }

View file

@ -1,6 +1,6 @@
from tortoise import fields from tortoise import fields
from typing_extensions import Self from typing_extensions import Self
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
class ToDoList(Model): class ToDoList(Model):

View file

@ -2,7 +2,7 @@ from datetime import datetime
import random import random
from tortoise import fields from tortoise import fields
from typing_extensions import Self from typing_extensions import Self
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
class QrTouch(Model): class QrTouch(Model):

View file

@ -1,7 +1,7 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
import random import random
from tortoise import fields from tortoise import fields
from src.my_sqlite.data_init.db_connect import Model from src.clover_sqlite.data_init.db_connect import Model
class UserList(Model): class UserList(Model):
user_id = fields.CharField(max_length=64, description="用户member_openid") user_id = fields.CharField(max_length=64, description="用户member_openid")

View file

@ -8,18 +8,18 @@ bot_account= "<KEY>"
# SMMS图床相关配置 # SMMS图床相关配置
smms_token= "<KEY>" # sm.ms图床的token smms_token= "<KEY>" # sm.ms图床的token
smms_image_upload_history= "https=//sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址 smms_image_upload_history= "https://sm.ms/api/v2/upload_history" # sm.ms图床获取上传图片历史API地址
# 聚合图床相关配置 # 聚合图床相关配置
ju_he_token= "<KEY>" # 聚合图床的token ju_he_token= "<KEY>" # 聚合图床的token
ju_he_image_list= "https=//api.superbed.cn/timeline" # 聚合图床获取上传图片历史API地址 ju_he_image_list= "https://api.superbed.cn/timeline" # 聚合图床获取上传图片历史API地址
""" """
AI AI
""" """
admin_password= "123456"#默认注册管理员密码 admin_password= "123456"#默认注册管理员密码
# 图灵机器人相关配置 # 图灵机器人相关配置
v3url= "https=//api.vveai.com/v1/chat/completions" v3url= "https://api.vveai.com/v1/chat/completions"
v3key= "<KEY>" v3key= "<KEY>"
# DeepSeek相关配置 # DeepSeek相关配置
deepseek_url= "https://api.deepseek.com" deepseek_url= "https://api.deepseek.com"

View file

@ -1,7 +1,7 @@
import os import os
from pathlib import Path from pathlib import Path
path = os.getcwd()+'/src/resources/image' path = os.getcwd()+'/src/resources/clover_image'
#塔罗牌图片路径 #塔罗牌图片路径
@ -16,7 +16,7 @@ rua_png = path+'/rua/'
# 图片路径 # 图片路径
IMAGE_PATH = Path() / "resources" / "image" IMAGE_PATH = Path() / "resources" / "clover_image"
# 语音路径 # 语音路径
RECORD_PATH = Path() / "resources" / "record" RECORD_PATH = Path() / "resources" / "record"
# 文本路径 # 文本路径

View file

@ -5,7 +5,7 @@ import nonebot.adapters.qq.exception
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, Message from nonebot.adapters.qq import MessageSegment,MessageEvent, Message
import src.videos.billibili.biliVideos as biliVideos import src.clover_videos.billibili.biliVideos as biliVideos
bili_vid = on_command("B站搜索",rule=to_me(), priority=10, block=True) bili_vid = on_command("B站搜索",rule=to_me(), priority=10, block=True)
@bili_vid.handle() @bili_vid.handle()
@ -70,7 +70,7 @@ async def get_video_file(message: MessageEvent):
# biliVideos.transcode_video(f"{cid}.mp4",f"{cid}-o.mp4") # biliVideos.transcode_video(f"{cid}.mp4",f"{cid}-o.mp4")
try: try:
# await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/videos/file/{cid}.mp4")))) # await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/clover_videos/file/{cid}.mp4"))))
await bili_bv_search.send(MessageSegment.video(video_url)) await bili_bv_search.send(MessageSegment.video(video_url))
except nonebot.adapters.qq.exception.ActionFailed as e: except nonebot.adapters.qq.exception.ActionFailed as e:
print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +"\033[0m [" + "\033[31;1mFAILED\033[0m" + "]" + "\033[31;1m nonebot.adapters.qq.exception.ActionFailed \033[0m" + str(e)) print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +"\033[0m [" + "\033[31;1mFAILED\033[0m" + "]" + "\033[31;1m nonebot.adapters.qq.exception.ActionFailed \033[0m" + str(e))
@ -102,7 +102,7 @@ async def get_video_file(message: MessageEvent):
# biliVideos.video_download(video_url, cid) # biliVideos.video_download(video_url, cid)
try: try:
# await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/videos/file/{cid}.mp4")))) # await bili_bv_search.send(Message(MessageSegment.file_video(Path(f"./src/clover_videos/file/{cid}.mp4"))))
await bili_bv_search.send(MessageSegment.video(video_url)) await bili_bv_search.send(MessageSegment.video(video_url))
except nonebot.adapters.qq.exception.ActionFailed as e: except nonebot.adapters.qq.exception.ActionFailed as e:
print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) + print("\033[32m" + str(time.strftime("%m-%d %H:%M:%S")) +

View file

@ -2,7 +2,7 @@ import re
from nonebot.rule import to_me from nonebot.rule import to_me
from nonebot.plugin import on_command from nonebot.plugin import on_command
from nonebot.adapters.qq import MessageEvent from nonebot.adapters.qq import MessageEvent
from src.my_sqlite.models.chat import ChatRole, GroupChatRole from src.clover_sqlite.models.chat import ChatRole, GroupChatRole
from src.configs.api_config import admin_password from src.configs.api_config import admin_password

View file

@ -7,9 +7,9 @@ from nonebot.rule import Rule, to_me
from nonebot.plugin import on_command, on_keyword from nonebot.plugin import on_command, on_keyword
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
from src.ai_chat import ai_chat from src.clover_openai import ai_chat
from src.my_sqlite.models.chat import GroupChatRole from src.clover_sqlite.models.chat import GroupChatRole
from src.my_sqlite.models.user import UserList from src.clover_sqlite.models.user import UserList
import platform import platform
import psutil import psutil
import time import time
@ -87,7 +87,7 @@ async def github_repo():
content = "三叶草bot仓库地址\n一起来搭个机器人吧😆" content = "三叶草bot仓库地址\n一起来搭个机器人吧😆"
msg = Message([ msg = Message([
MessageSegment.file_image(Path("src/resources/image/github_repo/SanYeCao-Nonebot3.png")), MessageSegment.file_image(Path("src/resources/clover_image/github_repo/SanYeCao-Nonebot3.png")),
MessageSegment.text(content), MessageSegment.text(content),
]) ])
await repository.finish(msg) await repository.finish(msg)

View file

@ -4,7 +4,7 @@ from pathlib import Path
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
from src.music.cloud_music.cloud_music import * from src.clover_music.cloud_music.cloud_music import *
music = on_command("点歌", rule=to_me(), priority=10, block=True) music = on_command("点歌", rule=to_me(), priority=10, block=True)
@music.handle() @music.handle()
@ -28,7 +28,7 @@ async def handle_function(msg: MessageEvent):
path = create_qr_code(unikey) path = create_qr_code(unikey)
"""是否要发送到QQ上面登录 """ """是否要发送到QQ上面登录 """
# await music.send(MessageSegment.file_image(Path(path))) # await clover_music.send(MessageSegment.file_image(Path(path)))
"""是否要发送到QQ上面登录 """ """是否要发送到QQ上面登录 """
while True: while True:

View file

@ -24,7 +24,7 @@ async def get_cf_rounds():
if matches["phase"] == "FINISHED": if matches["phase"] == "FINISHED":
break break
cf_image_path = './src/resources/image/codeforces/cfContestQR.png' cf_image_path = './src/resources/clover_image/codeforces/cfContestQR.png'
msg = Message([ msg = Message([
MessageSegment.file_image(Path(cf_image_path)), MessageSegment.file_image(Path(cf_image_path)),
MessageSegment.text(all_matches), MessageSegment.text(all_matches),

View file

@ -3,9 +3,9 @@ from pathlib import Path
from nonebot.rule import to_me from nonebot.rule import to_me
from nonebot.plugin import on_command from nonebot.plugin import on_command
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment,exception from nonebot.adapters.qq import Message, MessageEvent, MessageSegment,exception
from src.image.get_image import get_image_names from src.clover_image.get_image import get_image_names
from src.my_sqlite.models.fortune import QrFortune,QrFortuneLog from src.clover_sqlite.models.fortune import QrFortune,QrFortuneLog
from src.my_sqlite.models.tarot import MajorArcana from src.clover_sqlite.models.tarot import MajorArcana
import time import time
fortune_by_sqlite = on_command("今日运势", rule=to_me(), priority=10, block=True) fortune_by_sqlite = on_command("今日运势", rule=to_me(), priority=10, block=True)

View file

@ -30,7 +30,7 @@ async def good_news_img(message: MessageEvent):
img_url = response['url'] img_url = response['url']
# try: # try:
# await good_news.finish(MessageSegment.image(img_url)) # await good_news.finish(MessageSegment.clover_image(img_url))
# except BaseException: # except BaseException:
# await good_news.finish("出错啦,请重试。") # await good_news.finish("出错啦,请重试。")

View file

@ -2,7 +2,7 @@ from pathlib import Path
from nonebot.rule import to_me from nonebot.rule import to_me
from nonebot.plugin import on_command from nonebot.plugin import on_command
from nonebot.adapters.qq import MessageSegment from nonebot.adapters.qq import MessageSegment
from src.image.get_image import get_image_names from src.clover_image.get_image import get_image_names
image = on_command("", rule=to_me(), priority=10, block=True) image = on_command("", rule=to_me(), priority=10, block=True)

0
src/plugins/test/test.py Normal file
View file

View file

@ -1,7 +1,7 @@
from nonebot.adapters.qq import MessageEvent from nonebot.adapters.qq import MessageEvent
from nonebot.plugin import on_command from nonebot.plugin import on_command
from nonebot.rule import to_me from nonebot.rule import to_me
from src.my_sqlite.models.to_do import ToDoList from src.clover_sqlite.models.to_do import ToDoList
get_todo_list = on_command("待办查询", rule=to_me(), priority=10, block=True, aliases={"代办", "daiban"}) get_todo_list = on_command("待办查询", rule=to_me(), priority=10, block=True, aliases={"代办", "daiban"})
@get_todo_list.handle() @get_todo_list.handle()

View file

@ -3,8 +3,8 @@ from nonebot.adapters.qq import Message, MessageEvent
from nonebot.adapters.qq import MessageSegment from nonebot.adapters.qq import MessageSegment
from nonebot.plugin import on_command from nonebot.plugin import on_command
from nonebot.rule import to_me from nonebot.rule import to_me
from src.image.get_image import download_qq_image,qq_image_delete from src.clover_image.get_image import download_qq_image,qq_image_delete
from src.my_sqlite.models.user import UserList from src.clover_sqlite.models.user import UserList
today_group_wife = on_command("群老婆", rule=to_me(), priority=10, block=True) today_group_wife = on_command("群老婆", rule=to_me(), priority=10, block=True)
@today_group_wife.handle() @today_group_wife.handle()

View file

@ -2,8 +2,8 @@ from pathlib import Path
from nonebot.rule import to_me from nonebot.rule import to_me
from nonebot.plugin import on_command from nonebot.plugin import on_command
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
from src.my_sqlite.models.touch import QrTouch, QrTouchLog from src.clover_sqlite.models.touch import QrTouch, QrTouchLog
from src.image.get_image import download_qq_image_by_account, qq_image_delete, rua from src.clover_image.get_image import download_qq_image_by_account, qq_image_delete, rua
to = on_command("摸摸头", rule=to_me(), priority=10, block=True) to = on_command("摸摸头", rule=to_me(), priority=10, block=True)

View file

@ -1,160 +0,0 @@
import execjs
import requests
cookies = {
'NMTID': '00O8y8Jmz580oVUQEj2u8z-CtjK9TAAAAGT_JaiZQ',
'_ntes_nnid': '70ee9d950560215d692bbd3bac5f7ffd,1735109551078',
'_ntes_nuid': '70ee9d950560215d692bbd3bac5f7ffd',
'WM_TID': 'xAl%2FSCq1ZGxFEFQBVUOTDr%2F0kj2cJ4CW',
'WEVNSM': '1.0.0',
'WNMCID': 'iljzuk.1735109552031.01.0',
'ntes_utid': 'tid._.MOPuPUX%252FlRRFVlVFAUbTH7v0liiZp44J._.0',
'sDeviceId': 'YD-FPy2uqtGAzpEVwAFRBeVx3xH8QxWMOBV',
'__snaker__id': 'z682UZpwWWtLZGly',
'ntes_kaola_ad': '1',
'_iuqxldmzr_': '32',
'P_INFO': '15902053421|1735930696|1|music|00&99|null&null&null#gud&442000#10#0|&0|null|15902053421',
'__csrf': 'c9c07b72fc20b640171041342a760e81',
'MUSIC_U': '00B2B1E45F4C7D1F42BAC95F16E5D85EB2BFC68BE1BE7C6823C3C28A6304B1AB2D4A94E1D803311EF54D20985FAA383FC5003E895B02096F81188209A3BEB719E3768B01CFBCF587E947206DAA31320E0647B9475A1BBF856DFD117BAC65DD66D4A4DBC3F539F5EBA4544AECE36E35395EE562053591A64212AC8F37F30E2B8C11AB2C10C7C03AACBD5DA91C35703F339B829ABD1C51216EDDA18E9EF905F83E62BBC19376CFB5B17DF0E189C29BDA895578060D86C43BA75D89D69A4DEF267CCA705DFE2E6CA049310812FB57EDD6E4E68CE36AED458717E67246291193F48AB3E5620004ECC2E2A8D841C65D7C1A93926D80855CC9092B7FD29BFC5CAF154CB51BFA95CE76F24C732D1B7C6CFA9829025AA7478406C3B5DDBA76B0EF77E1C0B9839ED41FAAD8ED873F484158243ACC8DE9EF439FE9B018A08B3267CD8DDF0A7BC75F8D0625AB15C0F710471ACBB75B6B0220F283B168FB97899BA53E0A583378',
'gdxidpyhxdE': 'dY7CYik9SZysPpbpa%2B9IZ0WkY%2Bf%2BbijCEJvzgRykt3gd21PLr3Ef0Nd7cJ84EZRYl9gaSyIl8MYbGPTbZonYELjmYv%5CiX5Aasgwj92PikIIxp67PCjEU7bIDfjtqO8gYNgmNKUUZfgoi8GSWC2CzIDMuoVeX0aj2E%2Bw3qgPe%2BzIj0gQo%3A1736774883618',
'WM_NI': 'xxsz9lwGcCulm7plUDTn8EV4tPXXmBnkvNboMiKwOMaO68vvTGh%2B1%2F8geHL3MiaGz4kBNcL80kPI8L3k%2BIL2fR3rUpxQvjfQB14knTh8XpFASriLyzyWugn%2BZ8IrVmVSS3M%3D',
'WM_NIKE': '9ca17ae2e6ffcda170e2e6eebae25ef3bf85b9f14ab5ac8ab7d44b978f8eadcb6998b9a992b3418caca88ed82af0fea7c3b92abca8bd9bbc68b599ada4f868afe9c08dd85098b2f8a6d540b89098b9f04aaeb5baafe1658fb78598ce47a391fad9f57e9899a8ccb425fcb9aba9cf398fb7afa8f940a99e8284cf34f4b5a0aabb48f1b5e5aacf3aa68efd93d87cbc8fba8be55b82effc8ced60ace89891c54b91aea7adfc72bb89bb88ed219ae88793d567968d9dd4d037e2a3',
'JSESSIONID-WYYY': 'J1xKzQq7BEfO8faiU7GJrD54bxJC0oUwq8XyduKkEEBj8J8qy2n9Igx5l%2FQsOea4eBHs%2Bph7pHSFbPwTdCK4j6wSqY9BPMeJ828h5SZy4T4Rzx%2FQIrrvZn7ZbvrBwI9eDwd7vo9vOfVY4EIj2TpYdYP%2FTjOf5fzTq%5Ce3gB1a29J0ZyUY%3A1736913831537',
'playerid': '81625937',
}
headers = {
'accept': '*/*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'cache-control': 'no-cache',
# Requests sorts cookies= alphabetically
# 'cookie': 'NMTID=00O8y8Jmz580oVUQEj2u8z-CtjK9TAAAAGT_JaiZQ; _ntes_nnid=70ee9d950560215d692bbd3bac5f7ffd,1735109551078; _ntes_nuid=70ee9d950560215d692bbd3bac5f7ffd; WM_TID=xAl%2FSCq1ZGxFEFQBVUOTDr%2F0kj2cJ4CW; WEVNSM=1.0.0; WNMCID=iljzuk.1735109552031.01.0; ntes_utid=tid._.MOPuPUX%252FlRRFVlVFAUbTH7v0liiZp44J._.0; sDeviceId=YD-FPy2uqtGAzpEVwAFRBeVx3xH8QxWMOBV; __snaker__id=z682UZpwWWtLZGly; ntes_kaola_ad=1; _iuqxldmzr_=32; P_INFO=15902053421|1735930696|1|music|00&99|null&null&null#gud&442000#10#0|&0|null|15902053421; __csrf=c9c07b72fc20b640171041342a760e81; MUSIC_U=00B2B1E45F4C7D1F42BAC95F16E5D85EB2BFC68BE1BE7C6823C3C28A6304B1AB2D4A94E1D803311EF54D20985FAA383FC5003E895B02096F81188209A3BEB719E3768B01CFBCF587E947206DAA31320E0647B9475A1BBF856DFD117BAC65DD66D4A4DBC3F539F5EBA4544AECE36E35395EE562053591A64212AC8F37F30E2B8C11AB2C10C7C03AACBD5DA91C35703F339B829ABD1C51216EDDA18E9EF905F83E62BBC19376CFB5B17DF0E189C29BDA895578060D86C43BA75D89D69A4DEF267CCA705DFE2E6CA049310812FB57EDD6E4E68CE36AED458717E67246291193F48AB3E5620004ECC2E2A8D841C65D7C1A93926D80855CC9092B7FD29BFC5CAF154CB51BFA95CE76F24C732D1B7C6CFA9829025AA7478406C3B5DDBA76B0EF77E1C0B9839ED41FAAD8ED873F484158243ACC8DE9EF439FE9B018A08B3267CD8DDF0A7BC75F8D0625AB15C0F710471ACBB75B6B0220F283B168FB97899BA53E0A583378; gdxidpyhxdE=dY7CYik9SZysPpbpa%2B9IZ0WkY%2Bf%2BbijCEJvzgRykt3gd21PLr3Ef0Nd7cJ84EZRYl9gaSyIl8MYbGPTbZonYELjmYv%5CiX5Aasgwj92PikIIxp67PCjEU7bIDfjtqO8gYNgmNKUUZfgoi8GSWC2CzIDMuoVeX0aj2E%2Bw3qgPe%2BzIj0gQo%3A1736774883618; WM_NI=xxsz9lwGcCulm7plUDTn8EV4tPXXmBnkvNboMiKwOMaO68vvTGh%2B1%2F8geHL3MiaGz4kBNcL80kPI8L3k%2BIL2fR3rUpxQvjfQB14knTh8XpFASriLyzyWugn%2BZ8IrVmVSS3M%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eebae25ef3bf85b9f14ab5ac8ab7d44b978f8eadcb6998b9a992b3418caca88ed82af0fea7c3b92abca8bd9bbc68b599ada4f868afe9c08dd85098b2f8a6d540b89098b9f04aaeb5baafe1658fb78598ce47a391fad9f57e9899a8ccb425fcb9aba9cf398fb7afa8f940a99e8284cf34f4b5a0aabb48f1b5e5aacf3aa68efd93d87cbc8fba8be55b82effc8ced60ace89891c54b91aea7adfc72bb89bb88ed219ae88793d567968d9dd4d037e2a3; JSESSIONID-WYYY=J1xKzQq7BEfO8faiU7GJrD54bxJC0oUwq8XyduKkEEBj8J8qy2n9Igx5l%2FQsOea4eBHs%2Bph7pHSFbPwTdCK4j6wSqY9BPMeJ828h5SZy4T4Rzx%2FQIrrvZn7ZbvrBwI9eDwd7vo9vOfVY4EIj2TpYdYP%2FTjOf5fzTq%5Ce3gB1a29J0ZyUY%3A1736913831537; playerid=81625937',
'origin': 'https://music.163.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://music.163.com/',
'sec-ch-ua': '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0',
}
params = {
'csrf_token': 'c9c07b72fc20b640171041342a760e81',
}
data = {
'params': 'nvRE14quU2f1ge3FCmBfGqo3PAkgmLPWQYSjX5TTa6o3CSSvGGdecBNdLzvNymhfUyVDR6ZjboRjxOp0OaqzoXXbJUb085o+yJZWUt/+U7uBLM+zyYaAZBpSJk5wE30wJZ+/Y/NC0BDuN4lB7K+QR6VaUNly7hIk0trvh+DITgsoQqdKDie7C+EqFNEVYan9LoKVikJjaPFJAxBGtDZWrQ==',
'encSecKey': '27dba2f08b7025a9f62b326292dfc4975cb5d1c46d524ae2bd7a0f4e47ff60acdc5f22a99cab75a2a38083fa264b618ebdcded209c1f8d167d4e62205795bb4fb367db862644489bdef6266508a6c285b2e793968e02c856a13285c7ec7d7a8c2984ae70257ec721aa674a6c64f62cbb17535c07b4378dc2a95f7e48553e8db7',
}
f = open('../../music/cloud_music/param.js', 'r', encoding='utf-8').read()
ctx = execjs.compile(f)
result = ctx.call('get_music', '1357375695')
print(result)
data = {
'params': result['encText'],
'encSecKey': result['encSecKey'],
}
response = requests.post('https://music.163.com/weapi/song/enhance/player/url/v1', params=params, cookies=cookies, headers=headers,
data=data)
print(response.text)
"""
# 判断cookie是否有效
def netease_cloud_music_is_login(session):
try:
session.cookies.load(ignore_discard=True)
except Exception:
pass
csrf_token = session.cookies.get('__csrf')
c = str({'csrf_token': csrf_token})
try:
loginurl = session.post(
'https://music.163.com/weapi/w/nuser/account/get?csrf_token={}'.format(csrf_token),
data={
'params': AES_aes(AES_aes(c,g,iv),i,iv),
'encSecKey': encSecKey()},
headers=headers).json()
if '200' in str(loginurl['code']):
print('Cookies值有效', loginurl['profile']['nickname'], ',已登录!')
return session, True
else:
print('Cookies值已经失效请重新扫码登录')
return session, False
except BaseException:
print('Cookies值已经失效请重新扫码登录')
return session, False
# 登录扫码保存cookie
def netease_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)
# 读取
session.cookies = pickle.load(open('cloud_music_cookies.cookie', 'rb'))
session, status = netease_cloud_music_is_login(session)
if not status:
getlogin = session.post( 'https://music.163.com/weapi/login/qrcode/unikey?csrf_token=',
data={
'params': params(None),
'encSecKey': encSecKey()
},
headers=headers).json()
pngurl = 'https://music.163.com/login?codekey=' + getlogin['unikey'] + '&refer=scan'
qr = qrcode.QRCode()
qr.add_data(pngurl)
img = qr.make_image()
a = BytesIO()
img.save(a, 'png')
png = a.getvalue()
a.close()
# 打开二维码进行扫码操作
t = showpng(png)
t.start()
tokenurl = 'https://music.163.com/weapi/login/qrcode/client/login?csrf_token='
while True:
u = str({'key': getlogin['unikey'], 'type': "1", 'csrf_token': ""})
qrcodedata = session.post(
tokenurl,
data={
'params': params(u),
'encSecKey': encSecKey()
},
headers=headers).json()
if '801' in str(qrcodedata['code']):
print('二维码未失效,请扫码!')
elif '802' in str(qrcodedata['code']):
print('已扫码,请确认!')
elif '803' in str(qrcodedata['code']):
print('已确认,登入成功!')
break
else:
print('其他:', qrcodedata)
time.sleep(2)
with open('cloud_music_cookies.cookie', 'wb') as f:
pickle.dump(session.cookies, f)
return session
if __name__ == '__main__':
netease_cloud_music_login()
"""

0
src/resources/temp/temp Normal file
View file