跳至主要內容

课表推送助手

Jelly大约 4 分钟PythonPython工具

由于找到了网页版查看微信公众号的方法, 也就是在User-Agent中加入一个代表微信的字串, 所以可以直接调用学校公众号课表的接口获取数据. 所以之前的步骤通通不用, 只需要使用网页端存放openid以及推送的token即可.

更新详情: https://github.com/jellyqwq/class-helper#readmeopen in new window

项目地址: https://github.com/jellyqwq/class-helperopen in new window

新文章: 课表推送助手2.0


过去更新

学校下发的课程表都是图片,每次翻都非常不方便,而且经常有调换课,发的调换课的通知图片即使收藏起来也相当不便,于是我想到了可以做一个课程表推送,基于主课表对个人课表微调。

可以使用客户端class-helper-client提交自己的选修课信息和调课信息

做的过程也遇到不少麻烦,比如,腾讯的DNS没能正常给我的api域名解析,导致客户端调试时一直显示超时,但是把api域名直接改成服务器ip就没问题了

做的过程也遇到不少麻烦,比如,腾讯的DNS没能正常给我的api域名解析,导致客户端调试时一直显示超时,但是把api域名直接改成服务器ip就没问题了

整个项目主要包括了三大部分:

其中main.py和server.py是放在服务器上同一个目录下运行的

server.pyopen in new window 文件需要进行一定配置,因为用到了qq邮箱的SMTP服务,在文件里面需要填写QQ号、SMTP服务授权码open in new window以及QQ邮箱,这个邮箱服务是为了客户端注册和重置密码用的

main.pyopen in new window 默认设置了每天6点运行一次

client.pyopen in new window 考虑到不是每个人电脑上都有python运行环境,我就把客户端附带了python的虚拟环境,因此启动时需要用start.bat文件启动

双击启动start.bat后可以看到如下界面

如果是新用户就先创建账号,创建成功后本地会缓存登录信息文件,下次登录就不需要再手动登录,不过也没有手动登录这个选项:(

创建账号后会在当前文件夹下创建一个模板文件,名字是:学号(.json) 内容如下

  • student_id:创建时所使用的学号或账号
  • class_name:所属班级的名称
  • token:pushplus推送服务里的token
  • info:选修课配置(字典对象)
    • Wed:字典键->星期的缩写参考:Mon、Tue、Wed、Thu、Fri、Sat、Sun(字典对象)
      • 3:星期的下级结构是上课的时间序号(举个栗子:一节课在第5、6节上,那么他的时间序号即为6/2=3)和其对应的一个列表,因为课程都是一门课连着两节上的,所以结构就这样。(存放了多组字典对象的数组对象)
        • course-name:选修课名字
        • course-teacher:老师姓名
        • course-week:上课周数的数组
        • course-position:上课的地点or教室
  • class_change:调课信息(存放了多组字典对象的数组对象)
"class_change": [
        {
            "course-week": [调课前周数, 调课后周数],
            "course-week-day": [调课前星期几, 调课后星期几],
            "course-order": [调课前时间序号, 调课后时间序号]
        },
        {
            "course-week": [调课前周数, 调课后周数, 调课后周数],
            "course-week-day": [调课前星期几, 调课后星期几],
            "course-order": [调课前时间序号, 调课后时间序号],
            "course-position": "调课后上课地点,如果有改动就填,没有改动就像上面的调课一样不用写这项"
        }
    ]

接着就选4将配置信息提交到服务器即可

注意

如果当天没有课程,是不会进行推送的

pushplus需要在微信关注pushplus推送加并允许推送才能收到信息

目前只有我自己班有相关信息,因此其他班注册了也没用,需要写一份原始课表,原始课表模板

A&Q

为什么要手动填写?

因为学校教务系统提供的课表是图片,而且清晰度不算高,还有背景干扰,文字识别率低,固没用采用AI文字识别,同时手动填写也是为了课表信息的正确性和灵活性