未验证 提交 6a54c968 编写于 作者: Z Zain 提交者: GitHub

Add files via upload

上级 e550d53f
# netease-cloud-fastplay
网易云音乐快速听歌,个性化纠正账号的偏好
# 网易云音乐个性化纠正工具
简单来说就是可以快速增加指定歌曲的播放次数。
<p align="center">
<a href="https://github.com/ZainCheung"><img alt="Author" src="https://img.shields.io/badge/author-ZainCheung-blueviolet"/></a>
<img alt="PHP" src="https://img.shields.io/badge/code-Python-success"/>
<img src="https://visitor-badge.glitch.me/badge?page_id=ZainCheung.netease-cloud-fastplay"/>
</p>
[📷 效果演示](#效果演示)
[🎁 下载地址](#下载地址)
[🔔 注意事项](#注意事项)
[🎨 项目结构](#项目结构)
[👻 免责声明](#免责声明)
------
# 效果演示
使用前可以看到两首歌分别是**92**次和**41**
![使用前](https://s1.ax1x.com/2020/07/08/UZyQv8.png)
使用后两首各自涨了**300**
![使用后](https://s1.ax1x.com/2020/07/08/UZyUCq.png)
有人可能会问上面那个累计播放次数**2218**首没有变化,那是因为总数的累计播放只计算不重复的歌曲。
调用的API地址是(这个API可以自己搭建):
![](https://s1.ax1x.com/2020/07/08/UZ6geg.png)
打开软件填好账号密码(**MD5**)和**API**就可以开始执行任务了
软件的截图是这样
![](https://s1.ax1x.com/2020/07/10/UuoCMF.png)
这个歌单的`id``5101628912`,一共有三首歌,播放次数填写为`2`,点击开始执行后等待几秒钟便可以在软件下方的状态栏看到反馈。
# 下载地址
软件地址:[https://zaincheung.lanzous.com/iNYixehamha](https://zaincheung.lanzous.com/iNYixehamha)
软件项目地址:[https://github.com/ZainCheung/netease-cloud-fastplay](https://github.com/ZainCheung/netease-cloud-fastplay)
api接口项目地址:[https://github.com/ZainCheung/netease-cloud-api](https://github.com/ZainCheung/netease-cloud-api)
api的Demo演示地址:[https://netease-cloud-api.glitch.me](https://netease-cloud-api.glitch.me)
------
# 注意事项
### 1. API
API最好自己搭建,使用默认的API将会因为使用的人数较多导致**非常慢甚至进不去**,这个软件使用的API依旧是上次的API,只不过项目新增了接口,如果之前你搭建过就不需要重新搭建了,只需要复制项目的`index.php`文件的全部内容,然后粘贴到你的api项目里的`index.php`里面去,重启项目即可。
API项目最新地址:[https://github.com/ZainCheung/netease-cloud-api](https://github.com/ZainCheung/netease-cloud-api)
### 2. 密码
**密码必须自己前往MD5加密网站进行转换!!制作时选择32位小写!!!**
本软件不会将你的原文密码上传到服务器,请放心使用
在线“制作”MD5:[https://tool.chinaz.com/tools/md5.aspx](https://tool.chinaz.com/tools/md5.aspx)
### 3. 听歌次数
注意:播放次数不建议设置太大,可以先设置几十试试。
### 4. 初衷
这款软件的开发初衷是为了帮助使用过网易云音乐自动升级的用户,在系统推送不够精准的情况下进行自我纠正,通过增加某几首歌的播放次数可以告知系统你的听歌偏好,以便系统为你推荐你喜欢的歌单以及歌曲。
### 5. 其他
点击执行任务之前请不要打开或者删除日志文件和配置文件!
------
# 项目结构
```
|-- 项目文件夹
|-- LICENSE
|-- README.md
|-- init.config
|-- main.py
|-- ui.py
|-- api.py
|-- requirements.txt
|-- run.log
```
`LICENSE`:开源许可证
`README.md`:项目自述文件
`init.config`:配置文件
`main.py`:主程序
`ui.py`:界面模块
`api.py`:接口模块
`requirements.txt`:依赖清单
`run.log`:运行日志
# 免责声明
本项目的所有脚本、API以及软件仅用于个人学习开发测试,所有`网易云`相关字样版权属于网易公司,勿用于商业及非法用途,如产生法律纠纷与本人无关。
------
#coding:utf-8
'''
@author: ZainCheung
@LastEditors: ZainCheung
@description:api模块
@Date: 2020-07-09
@LastEditTime: 2020-07-10
'''
from configparser import ConfigParser
import json
import logging
import os
import requests
current_path = os.getcwd()
path_log = current_path + '\\run.log'
path_config = current_path + '\\init.config'
logFile = open(path_log, encoding="utf-8", mode="a")
logging.basicConfig(stream=logFile, format="%(asctime)s %(name)s:%(levelname)s:%(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=logging.INFO)
class Task(object):
'''
对象的构造函数
'''
def __init__(self, conf):
self.uin = conf['uin']
self.pwd = conf['pwd']
self.api = conf['api']
self.id = conf['id']
self.time = conf['time']
def get_response(self, url, post_json):
'''
带上用户的cookie去发送数据
url:完整的URL路径
postJson:要以post方式发送的数据
返回response
'''
response = requests.post(url, data=post_json, headers={
'Content-Type':'application/x-www-form-urlencoded'}, cookies=self.cookies)
return response
def login(self):
'''
登陆函数
'''
data = {"uin":self.uin,"pwd":self.pwd}
if '@' in self.uin:
url = self.api + '?do=email'
else:
url = self.api + '?do=login'
try:
response = requests.post(url, data=data, headers={'Content-Type':'application/x-www-form-urlencoded'})
except:
logging.error("服务器连接失败,请检查API以及当前网络环境")
return '服务器连接失败,请检查API以及当前网络环境'
else:
code = json.loads(response.text)['code']
if code==200:
self.name = json.loads(response.text)['profile']['nickname']
self.uid = json.loads(response.text)['account']['id']
self.cookies = response.cookies.get_dict()
self.error = self.name + '登陆成功!'
self.state = True
logging.info(self.name + '登陆成功!')
else:
self.state = False
self.error = '登陆失败,请检查账号密码是否正确'
logging.error("登陆失败,请检查账号密码是否正确")
return self.error
'''
听歌
'''
def listen(self):
url = self.api + '?do=listen'
data = {"id":self.id, "time":self.time}
try:
response = self.get_response(url, data)
data = json.loads(response.text)
self.count = data['count']
except:
logging.error("听歌失败,请检查API是否为最新版本!")
return '听歌失败,请检查API是否为最新版本!'
else:
logging.info("听歌成功,共听" + str(self.count) + "首")
return '听歌成功,共听' + str(self.count) + '首'
'''
初始化:读取配置,配置文件为init.config
返回字典类型的配置对象
'''
def init():
config = ConfigParser()
config.read(path_config, encoding='UTF-8-sig')
uin = config.get('token', 'account')
pwd = config.get('token', 'password')
api = config.get('setting', 'api')
id = config.get('setting', 'id')
time = config.get('setting', 'time')
conf = {
'uin': uin,
'pwd': pwd,
'api': api,
'id': id,
'time': time
}
return conf
def save(conf):
'''
数据持久化
'''
config = ConfigParser()
config.read(path_config, encoding='UTF-8-sig')
config.set("token", "account", conf['uin'])
config.set("token", "password", conf['pwd'])
config.set("setting", "api", conf['api'])
config.set("setting", "id", conf['id'])
config.set("setting", "time", conf['time'])
try:
with open("init.config", "w+") as f:
config.write(f)
except ImportError:
pass
[token]
account =
password =
[setting]
api = https://netease-cloud-api.glitch.me
id = 5101628912
time = 20
# -*- coding: utf-8 -*-
'''
@author: ZainCheung
@LastEditors: ZainCheung
@description:网易云音乐刷单曲播放次数
@Date: 2020-07-09
@LastEditTime: 2020-07-10
'''
import webbrowser
from threading import Timer
import re
import wx
import os
#导入ui.py,api.py中内容
import ui
import api
class mainWin(ui.MainFrame):
'''
创建mainWin类并传入main.MyFrame作为父类
'''
def start(self, event):
'''
事件函数:开始执行按钮
'''
conf = {
'uin': self.Ctrl_account.GetValue(),
'pwd': self.Ctrl_password.GetValue(),
'api': self.Ctrl_api.GetValue(),
'id': self.Ctrl_id.GetValue(),
'time': self.Ctrl_time.GetValue()
}
if self.check() is True:
api.save(conf)
self.conf = conf
self.button_start.SetLabel("正在执行中...")
self.button_start.Enable( False )
Timer(0, self.taskPool, ()).start()
else:
pass
def Event_openlog( self, event ):
'''
事件函数:菜单-查看日志
'''
os.system('notepad ' + api.path_log)
def Event_openconfig( self, event ):
'''
事件函数:菜单-查看配置
'''
os.system('notepad ' + api.path_config)
def Event_getApi( self, event ):
'''
事件函数:菜单-获取api
'''
webbrowser.open('https://github.com/ZainCheung/netease-cloud-api')
def Event_autoUp( self, event ):
'''
事件函数:菜单-自动升级
'''
webbrowser.open('https://www.52pojie.cn/thread-1208644-1-1.html')
def Event_about( self, event ):
'''
事件函数:菜单-关于软件
'''
panel_about = ui.Dialog_about(None).Show()
def Event_readme( self, event ):
'''
事件函数:菜单-使用帮助
'''
panel_readme = ui.Dialog_readme(None).Show()
def Event_feedback( self, event ):
'''
事件函数:菜单-反馈问题
'''
webbrowser.open('https://github.com/ZainCheung/netease-cloud-fastplay/issues/new')
def initData(self):
'''
初始化界面数据
'''
conf = api.init()
return conf
def check(self):
'''
检验输入数据的合法性
'''
account = self.Ctrl_account.GetValue()
password = self.Ctrl_password.GetValue()
api = self.Ctrl_api.GetValue()
id = self.Ctrl_id.GetValue()
time = self.Ctrl_time.GetValue()
state_account = False
state_password = False
state_api = False
state_id = False
state_time = False
com_phone = r'[1]+[\d]{10}$'
com_email = r'^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$'
com_password = r'[abcdef\d]{32}$'
com_id = r'[\d]{10}$'
com_time = r'[\d]{1,5}$'
if(account == ''):
self.Tipmsgbox('账号不能为空')
elif ('@' not in account):
if not re.match(com_phone, account):
self.Tipmsgbox('手机号格式不正确')
else:
state_account = True
elif not re.match(com_email, account):
self.Tipmsgbox('邮箱格式不正确')
else:
state_account = True
if not re.match(com_password, password):
self.Tipmsgbox('密码格式不正确,请将你的密码转换为32位小写的MD5')
else:
state_password = True
if api.startswith('https://') or api.startswith('http://'):
state_api = True
else:
self.Tipmsgbox('API格式不正确,应该以"https://"或者"http://"开头')
if not re.match(com_id, id):
self.Tipmsgbox('歌单id格式不正确,应为10位数字,请前往网易云网站查看歌单ID')
else:
state_id = True
if not re.match(com_time, time):
self.Tipmsgbox('播放格式不正确,应为1至99999之间的整数数字')
else:
state_time = True
if state_account and state_password and state_api and state_id and state_time:
return True
else:
return False
def taskPool(self):
'''
任务池
'''
task = api.Task(self.conf)
self.statusBar.SetStatusText(task.login())
try:
if task.state is True:
self.statusBar.SetStatusText(task.listen())
except:
pass
self.button_start.SetLabel("执行完毕")
self.button_start.Enable( True )
'''
程序主入口
'''
if __name__ == '__main__':
app = wx.App()
main_win = mainWin(None)
main_win.Show()
app.MainLoop()
\ No newline at end of file
日志文件
# -*- coding: utf-8 -*-
import wx
import wx.xrc
###########################################################################
## Class MainFrame
###########################################################################
class MainFrame ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"网易云音乐个性化纠正工具", pos = wx.DefaultPosition, size = wx.Size( 500,600 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL )
conf = self.initData()
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
self.SetBackgroundColour( wx.Colour( 240, 240, 240 ) )
gbSizer1 = wx.GridBagSizer( 0, 0 )
gbSizer1.SetFlexibleDirection( wx.BOTH )
gbSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
self.Text_account = wx.StaticText( self, wx.ID_ANY, u"账号", wx.Point( -1,-1 ), wx.Size( 50,-1 ), 0 )
self.Text_account.Wrap( -1 )
self.Text_account.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Text_account, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Ctrl_account = wx.TextCtrl( self, wx.ID_ANY, conf['uin'], wx.DefaultPosition, wx.Size( 300,-1 ), 0 )
self.Ctrl_account.SetToolTip( u"手机号或者邮箱" )
self.Ctrl_account.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Ctrl_account, wx.GBPosition( 0, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Text_api = wx.StaticText( self, wx.ID_ANY, u"API", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_api.Wrap( -1 )
self.Text_api.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Text_api, wx.GBPosition( 2, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Ctrl_api = wx.TextCtrl( self, wx.ID_ANY, conf['api'], wx.DefaultPosition, wx.Size( 300,-1 ), 0 )
self.Ctrl_api.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Ctrl_api, wx.GBPosition( 2, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Text_id = wx.StaticText( self, wx.ID_ANY, u"歌单ID", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_id.Wrap( -1 )
self.Text_id.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Text_id, wx.GBPosition( 3, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Ctrl_id = wx.TextCtrl( self, wx.ID_ANY, conf['id'], wx.DefaultPosition, wx.Size( 300,-1 ), 0 )
self.Ctrl_id.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Ctrl_id, wx.GBPosition( 3, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Text_time = wx.StaticText( self, wx.ID_ANY, u"播放次数", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_time.Wrap( -1 )
self.Text_time.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Text_time, wx.GBPosition( 4, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Ctrl_time = wx.TextCtrl( self, wx.ID_ANY, conf['time'], wx.DefaultPosition, wx.Size( 300,-1 ), 0 )
self.Ctrl_time.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Ctrl_time, wx.GBPosition( 4, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.button_start = wx.Button( self, wx.ID_ANY, u"开始执行", wx.DefaultPosition, wx.Size( 300,50 ), 0 )
self.button_start.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
self.button_start.SetBackgroundColour( wx.Colour( 0, 181, 46 ) )
gbSizer1.Add( self.button_start, wx.GBPosition( 5, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Text_password = wx.StaticText( self, wx.ID_ANY, u"密码", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_password.Wrap( -1 )
self.Text_password.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
gbSizer1.Add( self.Text_password, wx.GBPosition( 1, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.Ctrl_password = wx.TextCtrl( self, wx.ID_ANY, conf['pwd'], wx.DefaultPosition, wx.Size( 300,-1 ), wx.TE_PASSWORD )
self.Ctrl_password.SetFont( wx.Font( 12, 70, 90, 92, False, "微软雅黑" ) )
self.Ctrl_password.SetToolTip( u"必须填写MD5" )
gbSizer1.Add( self.Ctrl_password, wx.GBPosition( 1, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 20 )
self.SetSizer( gbSizer1 )
self.Layout()
self.statusBar = self.CreateStatusBar( 1, 0, wx.ID_ANY )
self.statusBar.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INFOBK ) )
self.menubar = wx.MenuBar( 0 )
self.menu_file = wx.Menu()
self.menuItem_openlog = wx.MenuItem( self.menu_file, wx.ID_ANY, u"查看日志", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_file.Append( self.menuItem_openlog )
self.menuItem_openconfig = wx.MenuItem( self.menu_file, wx.ID_ANY, u"查看配置", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_file.Append( self.menuItem_openconfig )
self.menubar.Append( self.menu_file, u"文件" )
self.menu_function = wx.Menu()
self.menuItem_getApi = wx.MenuItem( self.menu_function, wx.ID_ANY, u"获取API", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_function.Append( self.menuItem_getApi )
self.menuItem_autoUp = wx.MenuItem( self.menu_function, wx.ID_ANY, u"自动升级", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_function.Append( self.menuItem_autoUp )
self.menubar.Append( self.menu_function, u"功能" )
self.menu_help = wx.Menu()
self.menuItem_about = wx.MenuItem( self.menu_help, wx.ID_ANY, u"关于软件", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_help.Append( self.menuItem_about )
self.menuItem_readme = wx.MenuItem( self.menu_help, wx.ID_ANY, u"使用说明", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_help.Append( self.menuItem_readme )
self.menu_help.AppendSeparator()
self.menuItem_feedback = wx.MenuItem( self.menu_help, wx.ID_ANY, u"反馈问题", wx.EmptyString, wx.ITEM_NORMAL )
self.menu_help.Append( self.menuItem_feedback )
self.menubar.Append( self.menu_help, u"帮助" )
self.SetMenuBar( self.menubar )
self.Centre( wx.BOTH )
# Connect Events
self.button_start.Bind( wx.EVT_LEFT_DOWN, self.start )
self.Bind( wx.EVT_MENU, self.Event_openlog, id = self.menuItem_openlog.GetId() )
self.Bind( wx.EVT_MENU, self.Event_openconfig, id = self.menuItem_openconfig.GetId() )
self.Bind( wx.EVT_MENU, self.Event_getApi, id = self.menuItem_getApi.GetId() )
self.Bind( wx.EVT_MENU, self.Event_autoUp, id = self.menuItem_autoUp.GetId() )
self.Bind( wx.EVT_MENU, self.Event_about, id = self.menuItem_about.GetId() )
self.Bind( wx.EVT_MENU, self.Event_readme, id = self.menuItem_readme.GetId() )
self.Bind( wx.EVT_MENU, self.Event_feedback, id = self.menuItem_feedback.GetId() )
def initData( self ):
conf = {
'uin': '测试账号',
'pwd': '',
'api': '',
'id': '',
'time': ''
}
return conf
def __del__( self ):
pass
def Tipmsgbox(self, content):
wx.MessageBox(content, "提示" ,wx.OK | wx.ICON_INFORMATION)
# Virtual event handlers, overide them in your derived class
def start( self, event ):
event.Skip()
def Event_openlog( self, event ):
event.Skip()
def Event_openconfig( self, event ):
event.Skip()
def Event_getApi( self, event ):
event.Skip()
def Event_autoUp( self, event ):
event.Skip()
def Event_about( self, event ):
event.Skip()
def Event_readme( self, event ):
event.Skip()
def Event_feedback( self, event ):
event.Skip()
class Dialog_about ( wx.Dialog ):
def __init__( self, parent ):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"关于软件", pos = wx.DefaultPosition, size = wx.Size( 500,500 ), style = wx.DEFAULT_DIALOG_STYLE )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
gbSizer2 = wx.GridBagSizer( 0, 0 )
gbSizer2.SetFlexibleDirection( wx.BOTH )
gbSizer2.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
self.Text_aboutSoft = wx.StaticText( self, wx.ID_ANY, u"本软件开源免费,请勿二次售卖!\n首发:吾爱破解论坛\n作者:ZainCheung(superBoyJack)\n\n声明:本软件仅用于个人学习开发测试,\n所有网易云相关字样版权属于网易公司,\n勿用于商业及非法用途!\n\n如您使用该软件即你已了解并同意该声明!", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_aboutSoft.Wrap( -1 )
self.Text_aboutSoft.SetFont( wx.Font( 15, 70, 90, 90, False, "微软雅黑" ) )
gbSizer2.Add( self.Text_aboutSoft, wx.GBPosition( 1, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 30 )
self.button_about_know = wx.Button( self, wx.ID_ANY, u"我已了解", wx.DefaultPosition, wx.DefaultSize, 0 )
self.button_about_know.SetFont( wx.Font( 15, 70, 90, 90, False, "微软雅黑" ) )
gbSizer2.Add( self.button_about_know, wx.GBPosition( 2, 1 ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER|wx.ALL, 30 )
self.SetSizer( gbSizer2 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.button_about_know.Bind( wx.EVT_BUTTON, self.Event_know )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def Event_know( self, event ):
self.Destroy()
class Dialog_readme ( wx.Dialog ):
def __init__( self, parent ):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"使用帮助", pos = wx.DefaultPosition, size = wx.Size( 500,500 ), style = wx.DEFAULT_DIALOG_STYLE )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
gbSizer3 = wx.GridBagSizer( 0, 0 )
gbSizer3.SetFlexibleDirection( wx.BOTH )
gbSizer3.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
self.staticline_readme = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
gbSizer3.Add( self.staticline_readme, wx.GBPosition( 1, 0 ), wx.GBSpan( 1, 1 ), wx.EXPAND |wx.ALL, 5 )
self.Text_readme_alert = wx.StaticText( self, wx.ID_ANY, u"功能介绍:填入账号密码与API,输入歌单ID和播放次数\n程序会登陆该账号将该歌单播放你指定的次数\n\n提示:播放完成速度取决于你的API速度\n建议播放次数不要太大,效果请到网易云个人主页查看\n\n注意:密码必须自己前往MD5加密网站进行转换\n本软件不会将你的原文密码上传到服务器,请放心使用\n如果API不可用或者速度非常慢请更换\n执行任务之前请不要打开或者删除日志文件和配置文件\n", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_readme_alert.Wrap( -1 )
self.Text_readme_alert.SetFont( wx.Font( 12, 70, 90, 90, False, "微软雅黑" ) )
gbSizer3.Add( self.Text_readme_alert, wx.GBPosition( 2, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 30 )
self.Text_readme_read = wx.StaticText( self, wx.ID_ANY, u"这款软件的开发初衷是为了帮助使用过网易云自动升级的用户\n在系统推送不够精准的情况下进行自我纠正\n通过增加某几首歌的播放次数可以告知系统你的听歌偏好\n以便系统为你推荐你喜欢的歌单以及歌曲", wx.DefaultPosition, wx.DefaultSize, 0 )
self.Text_readme_read.Wrap( -1 )
self.Text_readme_read.SetFont( wx.Font( 12, 70, 90, 90, False, "微软雅黑" ) )
gbSizer3.Add( self.Text_readme_read, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER|wx.ALL, 30 )
self.SetSizer( gbSizer3 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
pass
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册