欢迎光临散文网 会员登陆 & 注册

使用Python开发Malody V商店服务器日志(一)

2022-12-12 19:17 作者:nick235711  | 我要投稿

一、前言

        第一次搞这么大的项目,属实是有点迷茫。

        突然想到整一个粉丝范围内的小Malody V服,于是我就开始干了。

        刚开始,我到bing上搜了一些别人做的开源项目,看着要整一堆东西,我也就跟着整了。结果,不想来什么就来什么。每个项目都靠着MySQL这个破数据库,数据库setup完了之后还不给我连接成功,我就果断放弃了。

        后来想,既然我会写点Python代码,为啥不自己写个服务器呢?

        于是我就在没有任何写服务器的基础上开始了。。。

二、服务器的基础——接收和发送

        我花了大概半个多小时的时间快速学习了一下如何用socket建立服务器(与其说是借鉴,不如说是ctrl+c/v)。试着用Malody V连了一下,算是接收到了请求。于是我用api迅速写了个回复发送。

        对,“回复发送”,“只有一个接收格式的回复”。

        我一试,诶,接收到了,也发送了,怎么就不行了?

        经过一个多小时的研究,“原来是要用html信息格式发送”。

        最终,登录服务器模块作为整个服务器的基础,做好了。

三、更多请求

        是时候将这种组合用在一些重要的模块上了,首先我想到的就是商店浏览谱包。

        这是谱包的接收格式,乍一看人直接傻眼。

        这next是啥?这data又咋输出?

        先从data的问题开始。

        既然data要从谱面文件中读,我何不整个txt文件,上传谱面时往里面输入谱包信息,然后找谱面的时候再读取呢,于是我就这样干了。

        以谱包信息所在txt的行号作为sid,谱面存储处再用sid作为名字,很快就设计了一个每行只有6个元素并且用空格隔开的信息列表:时长、bpm、歌名、作曲、模式、时间。以如下两个作为范例:

79 130.00 DREAM iowo 217 1454342618

146 202.00 Sterelogue VeetaCrush 217 1561899016

        这样,当请求显示指定id的谱包的时候,就好办了,直接读取导入,写入发送就完了。

        于是一个简单的请求模块就写好了。

        但这还不止:1. 没有谱面的时候无法发送会出现故障 2. 根据已给信息,只能发送第一个,未利用next

        第一个很简单:在行数为0的时候返回一个204

        至于第二个,得仔细研究一下next了。

        我比对了一下两次发出的请求,发现只差在一个地方,第二次多了个&from:

        也就是说,这个&from是解题的关键。

        正巧第一次请求,我回复的是“next”:1,那么,这个next应该就是下一次请求过来的from值。

        于是我将from值截取过来,作为下一个谱面的sid,然后再往后扩展一个next值,这样就可以连续发送了。

        但问题又来了,发完了该发什么?

        为了解决这个问题,我又加了个识别是不是最后一个sid,更改是否还有后续信息,这样就可以了。

        但是,当我真正运行的时候,发现请求的速度贼慢,大概5秒钟一次,这速度谁还逛谱面商店?

        于是,我加了个十重发送,在data这个列表里叠十个谱包信息,这样就能一次发送10个谱包信息了。

        最终,这个模块也算完成了。

四、代码展示(我直接copy了啊,想用的随时用,不过连下载功能都没有,根本用不了)

五、待发展内容

  • 其他类型的请求模块

  • 请求模块对应的其他数据文件

  • 支持带空格的曲名、作曲

  • 支持搜索、过滤等高级功能

  • 解决谱面商店无法显示图片问题

*使用Python 3.8.9


使用Python开发Malody V商店服务器日志(一)的评论 (共 条)

分享到微博请遵守国家法律