大概是我最后一次折腾课表订阅...
Aug 09, 2025
大一的时候写了一个 Python 脚本,用来把教务系统的课表转换成 ics 格式的日历文件,方便我导入到系统日历里看上课时间 (装逼)。
第一个版本问题有点多:不支持自动登录,每次都得手动输验证码,解析也有点问题。后面修修补补用到了大二,重写了一波,支持了验证码识别,解析也更稳定 (鲁棒) 了,但是它还不是我心中最理想的模样。
因为这是个脚本,你得手动运行、把文件传到手机上、然后手动导入。其实可以不用这么麻烦的,因为还有个东西叫日历订阅。
暑假闲得无聊,总算决定把这个东西实现一下,之前没做订阅的原因是验证码不能自动识别,而订阅就是一串 URL 链接,没法交互,何况订阅就是放在那让它自己更新的,每次更新还要输验证码也太弱智了。
但是重写的版本里已经实现了识别,用的是非常土的方法,相当于自己搓了一个 OCR,参考的是 Python 手动实现数字验证码识别。所以订阅所需的前置条件已经凑齐,只剩下撸个后端了。
我早就想玩玩 serverless,总算有了机会。于是把 Python 版本的整个代码库移植到了 JavaScript 里(因为要部署在 Cloudflare Workers 上,虽然它也能用 Python,但我总觉得不够得劲)。
大部分体力活都是 AI 做的,不过解析器还是得手写,因为 AI 太蠢,理解不了如此清奇的解析逻辑。最开始我还害怕验证码的部分会撞上 Workers 的 CPU 时间限制,结果并没有,要感谢优化 JS 引擎的人,让我如此铸币的代码都能跑的这么快。

开源在 Github,好用的话点个 Star,不好用到 Issue 对线。