废话部分

之前说到过笔记本烧毁的事情,因此开学准备台式机这件事已经决定了。既然要组台式机,自然是要各方面都折腾一番,分体水不太方便就算了,AIO水冷、ARGB什么的都要玩玩才过瘾,那就自然跑不掉基于AIDA64的监视器。现有的方案主要有一下几种:
1. 接一个副屏,然后在副屏上显示SensorPanel项目。
2. 使用旧手机通过Odospace显示LCD信息。
3. 通过其他设备访问RemoteSensor的网络端口显示LCD信息。
4. 自制一个设备通过串口接受数据并显示。
5. 使用LCD项目里其他受支持的设备,因为基本买不到干脆pass。

方案5直接被pass;方案4过于麻烦,且想要显示彩色图像成本不低,pass;方案1等于给电脑接了一个不能用于其他内容显示的屏幕,但是在操作的时候总会有鼠标跑到那块屏幕上的时候,很不方便,且和方案4一样,这类小屏幕并不便宜(相对)。
来看方案2,废物利用自然是好,但我手里没有能废物利用的手机。唯一一台没人用的手机是充话费送的青橙T3,这手机简直就是垃圾中的垃圾,无话可说。再看方案3,“其他设备”首先可以是树莓派,但是树莓派并不便宜,配套的屏幕(也就是方案1和4要用的)也不便宜(相对)。那么换一个思路,既然是用浏览器查看信息,那么只要是能上网的设备应该都差不多,也就是说成本上和方案2一样,需要一台手机。咸鱼看看二手手机的价格,同时顺便看了一下二手平板的价格,感觉弄一台二手平板用来做监控比较省钱,效果还好。
同时如果弄一个Windows系统的平板就更方便了,还可以在后台运行一些脚本。平板性能虽然很低但是应该足够用了。整个计划还要等开学后才能实施,先画一张饼在这。

整点报时器

所以这个装着win系统的监视器可以在后台运行一些程序,不如做一个整点报时器玩玩。报时的语音用舰队Colletion的报时语音就行,反正不需要什么效率,用python写好然后打包成exe就可以放进平板里运行了。
那么首先就要把音源搞定。综合考虑一下还是把音源下载到本地播放比较合适,但是网上又没有打包好的音源可供下载,因此需要自己写一个爬虫。萌娘百科上的舰娘页有音频,但是综合考虑后放弃了。萌百站用的是Cloudflare的CDN,爬虫必然触发反爬,麻烦的要死。好在舰娘百科也提供了语音文件,且服务器在上海市腾讯云,访问很方便。并且试了试也没有触发任何反爬虫,那就是你了。
当然首先我们还要看一下robots.txt文件:

Sitemap: https://zh.kcwiki.org/sitemap/sitemap-index-kcwiki-wiki_.xml
Sitemap: https://zh.kcwiki.org/sitemap/sitemap-kcwiki-wiki_-NS_0-0.xml.gz
User-agent: *
Disallow: /index.php?diff=
Disallow: /index.php?oldid=
Disallow: /index.php?from=
Disallow: /index.php?title=Help
Disallow: /index.php?title=File
Disallow: /index.php?title=MediaWiki
Disallow: /index.php?title=Special:
Disallow: /index.php?title=Template
Disallow: /index.php?direction=prev&oldid=
Disallow: /index.php?hidelinks=1&title=Special:
Disallow: /skins/
Disallow: /zh
Disallow: /index.php?
Disallow: /wiki/Special:
Disallow: /wiki/File:
Crawl-delay: 10

虽然禁止爬/wiki/File:的页面,但是我们并不需要爬这个页面就能获取到文件地址。文件地址都在kcwiki.kcyuri.com上,而这个域名并没有设置robots.txt,也就是不禁止我们爬。
由于不同舰娘页面元素布局有所出入,使用Beautifulsoup不太方便处理,用Selenium更是多此一举。看了一下报时音频文件链接格式基本为https://kcwiki.kcyuri.com/commons/f/fc/276-1100.mp3,因此写一个正则规则直接匹配一遍就可以把报时的链接提取出来了。正则规则为https://kcwiki\.kcyuri\.com/commons/.{0,15}\-\d{4}\.mp3,有报时的舰娘页面可以提取出24个链接,没有报时的舰娘可以提取出0个。有一位舰娘只能提取出23个链接,经查证是kcwiki.cn丢失了川内的一个报时,我从萌百手动下载补上了。
音频文件准备好之后就要写报时器部分了。为了实现整点报时我决定使用Windows的任务计划程序功能,整点运行程序,程序检查时间后播放对应报时语音。每天第一次运行时随机选出当天的舰娘,之后一天的报时都由该舰娘负责。音频文件格式是mp3,因此我选择了playsound库用于播放,然后在这里翻车了。
上一步出于方便,我保存舰娘语音用的是中文路径,结果playsound库报错。虽然可以把路径改成英文运行,但是不直观。我试着改自己程序但是并没有卵用,只好去看第三方库的代码。打开就看见这么一段话。

原来只能Probably运行在我的环境,出问题还得自己改。
好在代码只有120行,还有三分之二是macOS和Linux的部分。很容易就发现问题在playsound.py的第23行command = ' '.join(command).encode(getfilesystemencoding()),sys.getfilesystemencoding()函数是用于获取文件系统使用编码方式的函数,在我的环境下返回值是'utf-8',但是报错信息显示的是UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5,也就是说这里不应该用utf-8,而应该是mbcs。把这行直接改成command = ' '.join(command).encode('mbcs')就支持中午路径了,音频也就可以顺利播放了。
由于不打算在破平板上安装python,因此直接打包成exe可执行文件就行了,在任务计划程序里设置一下就可以整点运行。
报时这种程序就没必要开源了吧,我已经把涉及到的中文路径问题解决了,不会真有人还写不出来吧,不会吧不会吧(滑稽)。至于音频文件如果实在搞不定的话,可以在讨论区留言,我发给你。


挂科一时爽,一直挂科一直爽。
🀇🀇🀇🀈🀉🀊🀋🀌🀍🀎🀏🀏🀏 🀋