CCUT课程表小助手(重构中)

开源项目地址

使用方法

  • 网页查询地址:kcb.brucec.cn
  • 添加机器人为好友,QQ号 2895727556 (二维码加好友) ,验证信息随意,会自动同意好友请求。
  • 添加为好友后根据提示进行绑定(QQ发送/bindkcb 学号 密码)即可接收推送或进行查询。
  • 使用/mykcb指令可以获取完整课程表的网页链接(永久有效)。

系统结构 (V2.0)

  • 点击图片可放大

系统结构 (V1.0)

  • 点击图片可放大

功能演示

点击展开



功能需求

  • 每日课程表推送功能
  • 查询指定日期课程表功能(一定程度上支持自然语言查询)
  • 查询总课程表功能
  • 教务系统验证码识别在本地完成

方案选择

  • 旧版内容,未更新
  1. 消息推送
    • 短信等运营商级推送渠道:成本太高。
    • 用户安装应用进行通知推送:对于Android系统来说没有白名单难以保活,操作繁琐用户体验差。
    • 利用现有安装率高的IM应用实现推送:
      • 微信:我个人用的不多,可以使用公众号模板消息和小程序的订阅消息实现推送,前者早在20年初就已通知下架(但还在延期开放),订阅消息可行但需要引导用户关注小程序。
      • 企业微信,官方提供给企业内部人员发送消息的API,缺点是免费版限制200企业人数,优点是API调用方便并且消息可同步到微信接收。
      • QQ:最终选用的方案,因为我个人使用的更频繁,而且之前实现过签到结果推送,可以复用代码。
  2. 单日课程表查询
    • 一般来说,查询单日课程表的需求较强,目前支持使用自然语言在QQ进行查询,以文本消息形式进行返回(图片消息容易被腾讯风控且文本课表的信息量已经足够)。包含课程节次、课程名称、教师名称、上课地点信息。
  3. 总课程表查询
    • 目标是能够展示教务系统查询课程表界面内勾选放大后的课程表。
    • 查询任意用户完整课程表:通过网页端提供一个简单的查询页面
    • 查询已绑定用户完整课表:使用QQ推送网页链接,仅支持在网页端查看课表。没有使用QQ推送图片实现是因为此功能使用率较低,编写生成课程表图片的代码也比较麻烦,而且使用网页端方便与第二点功能相结合。
  4. QQ机器人框架使用 Mirai ,是一个异步的QQ机器人框架,可使用 Kotlin/Java 编写插件。
  5. 爬虫使用 Python 的 requests 库。
  6. 验证码识别部分期望是找到预训练好的基于CNN神经网络的端到端模型,节省开发时间。
    • 很幸运找到了完美符合需求的 MuggleOCR 模块(清华Pypi镜像),是基于CaptchaTrainer项目训练的。
    • 使用纯CPU部署CNN5网络:在能够使用 AVX 和 AVX2 指令集的机器上(铂金 8255C 4T / I7-8650U 4C8T),识别耗时约 20ms;不支持 AVX 的低端赛扬机器上,识别耗时 100ms。
  7. 数据库使用 sqlite3 ,轻量好用。