背景
两年前我实在受不了过去三年运营校园墙时那些繁琐的工作,用一周时间(事实上上线的第一版只花了两天)开发了 QQ 空间校园墙自动化系统的第一版(项目代号:CamWall)。
当时运行在一台 Windows 服务器上,一个端用来作为微信小程序(用户端)的后端,接收稿件,与数据库交互;一个端基于 Mirai 和 YiriMirai 实现 QQ 机器人供用户绑定账号;一个端通过 Python 的模拟键鼠操作发表稿件到 QQ 空间(感谢天翼云主机的 web 桌面能在退出后保持亮屏)。这个架构跑了大概 4 个月吧。
![最初的小程序](https://rockchin.top/wp-content/uploads/2024/05/95c296293f2a521fc6705b2a7de4b402-1024x819.png)
![Windows 服务器上的键鼠控制](https://rockchin.top/wp-content/uploads/2024/05/1786a06eb803e1050d74759c6b372848-1024x599.jpg)
![成功发表](https://rockchin.top/wp-content/uploads/2024/05/c1bd85a21ec7d661d2ea0331135ec4e0-edited.jpg)
后来走向开源,重写了一遍整个系统。做成了单体应用,全部使用 Python 实现。使应用运行更加高效,架构更加稳定。发表说说的过程也改为了自行逆向的 QQ 空间 API 方式,相比键鼠模拟来说,稳定性更高。开源在:github.com/RockChinQ/OpenCamwall 。有趣的是,这个项目的很多概念和实践后来都用在了 QChatGPT 第一版中,相当于为后来我开源项目的成熟度打下了很好的技术基础🫢
本着“代码能跑就不要改的原则”,这个大版本的程序跑了两年……(居然跑了整整两年,不可思议)
转折
很遗憾的是,今年开始微信小程序强制备案了,我真被“3月底清退未备案小程序“的通知吓到了(事实上后来并没有清退)。同时,目前架构耦合度非常高,我们的墙号已经持续一年多好友爆满了,以当前的架构难以扩展第二个号。于是我们打算重构,前端全面转向 Web,使用较为流行的技术栈。将这两年新学到的技术应用到这上面,包括:Redis、MongoDB、Gin、MinIO、JWT、Vue、Vuetify等,部署方面也全面转向容器化。在开发阶段,同样转向规范化,使用 APIFox 设计 API,将环境分为开发环境、测试环境 和 生产环境。同时使用GitHub Actions 和 Watchtower 实现 CI。
Campux的前端由 @Soulter 开发,基于 Vue 框架,使用 Vuetify 作为组件库。
![](https://rockchin.top/wp-content/uploads/2024/05/image-1024x859.png)
Campux 分为多个端,Backend 提供 API 、协调数据;前端供用户投稿和管理员审核稿件;Bot 端基于 NoneBot2 框架,使用 Lagrange 作为消息平台框架,供用户注册账号,实现QQ空间的登录和说说发表;CampuxUtility 提供 HTML 转图片(基于Playwright实现)等常用工具。
![渲染效果](https://rockchin.top/wp-content/uploads/2024/05/78e269e6690fcc228ef8cec0b0032069-1-1024x542.jpg)
Campux 使用 Redis 的消息队列和 哈希 等功能,实现了异步消息推送,极大地解藕了各个端的逻辑,也能很轻松地实现多个 Bot 的架构。
![](https://rockchin.top/wp-content/uploads/2024/05/image-1-692x1024.png)
![](https://rockchin.top/wp-content/uploads/2024/05/image-2.png)
Campux 目前已开源在 github.com/idoknow/Campux ,文档将在之后更新,敬请期待。
影响
常见的 QQ 空间校园墙,需要花费大量的时间与用户协调,收取用户的稿件、截图、手动发表,费时费力。而这两年自动化运营后,我们可以将更多的精力放在内容上,制定更加公平合理的投稿规则,甚至利用 LLM 来协助审核。目前 沙塘大道第一墙 的单日访客量轻轻松松能达到8000以上,每条说说点赞量都在400-700个。
发表回复