使用Python開發(fā)Malody V商店服務器日志(一)
一、前言
????????第一次搞這么大的項目,屬實是有點迷茫。
????????突然想到整一個粉絲范圍內的小Malody V服,于是我就開始干了。
????????剛開始,我到bing上搜了一些別人做的開源項目,看著要整一堆東西,我也就跟著整了。結果,不想來什么就來什么。每個項目都靠著MySQL這個破數據庫,數據庫setup完了之后還不給我連接成功,我就果斷放棄了。
????????后來想,既然我會寫點Python代碼,為啥不自己寫個服務器呢?
????????于是我就在沒有任何寫服務器的基礎上開始了。。。

二、服務器的基礎——接收和發(fā)送
????????我花了大概半個多小時的時間快速學習了一下如何用socket建立服務器(與其說是借鑒,不如說是ctrl+c/v)。試著用Malody V連了一下,算是接收到了請求。于是我用api迅速寫了個回復發(fā)送。
????????對,“回復發(fā)送”,“只有一個接收格式的回復”。
????????我一試,誒,接收到了,也發(fā)送了,怎么就不行了?
????????經過一個多小時的研究,“原來是要用html信息格式發(fā)送”。
????????最終,登錄服務器模塊作為整個服務器的基礎,做好了。

三、更多請求
????????是時候將這種組合用在一些重要的模塊上了,首先我想到的就是商店瀏覽譜包。
????????這是譜包的接收格式,乍一看人直接傻眼。
????????這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的譜包的時候,就好辦了,直接讀取導入,寫入發(fā)送就完了。
????????于是一個簡單的請求模塊就寫好了。
????????但這還不止:1. 沒有譜面的時候無法發(fā)送會出現(xiàn)故障 2. 根據已給信息,只能發(fā)送第一個,未利用next
????????第一個很簡單:在行數為0的時候返回一個204
????????至于第二個,得仔細研究一下next了。
????????我比對了一下兩次發(fā)出的請求,發(fā)現(xiàn)只差在一個地方,第二次多了個&from:
????????也就是說,這個&from是解題的關鍵。
????????正巧第一次請求,我回復的是“next”:1,那么,這個next應該就是下一次請求過來的from值。
????????于是我將from值截取過來,作為下一個譜面的sid,然后再往后擴展一個next值,這樣就可以連續(xù)發(fā)送了。
????????但問題又來了,發(fā)完了該發(fā)什么?
????????為了解決這個問題,我又加了個識別是不是最后一個sid,更改是否還有后續(xù)信息,這樣就可以了。
????????但是,當我真正運行的時候,發(fā)現(xiàn)請求的速度賊慢,大概5秒鐘一次,這速度誰還逛譜面商店?
????????于是,我加了個十重發(fā)送,在data這個列表里疊十個譜包信息,這樣就能一次發(fā)送10個譜包信息了。
????????最終,這個模塊也算完成了。
四、代碼展示(我直接copy了啊,想用的隨時用,不過連下載功能都沒有,根本用不了)
五、待發(fā)展內容
其他類型的請求模塊
請求模塊對應的其他數據文件
支持帶空格的曲名、作曲
支持搜索、過濾等高級功能
解決譜面商店無法顯示圖片問題
*使用Python 3.8.9