AI摘要
这是一个用于宝鸡文理学院教务系统自动课表推送的脚本,它能够自动抓取课表,结合天气和每日情话,通过PushPlus和Bark推送到微信/iOS,实现自动化提醒。项目包括模拟登录、获取课表数据、解析课程表JS、当日筛选与排序、天气与情话API调用以及多平台推送等功能。用户可以根据自己的需求进行部署和配置。
📚 宝鸡文理学院教务系统自动课表推送脚本
本项目用于每日从教务系统自动抓取课表,结合天气与每日情话,通过 PushPlus 和 Bark 推送到微信/iOS,实现完全自动化提醒。
📦 代码演示
# 节选:获取今日课表并推送
week = get_current_week(SEMESTER_START)
today_courses = get_today_courses(course_map)
today_str = datetime.now().strftime('%Y-%m-%d %A')
weather_info = get_weather_tianapi()
quote = get_love_words()
send_time = datetime.now().strftime('%H:%M:%S')
msg = f"{weather_info}\n\n📅 **{today_str}**\n\n🧭 **第 {week} 周 · 今日课程:**\n\n"
if today_courses:
msg += "| 课程名 | 上课地点 | 时间 |\n"
msg += "|--------|----------|------|\n"
pattern = r'(.+?)\(\d{6,}(?:\.\w+)?\)[((](.+?)[))](.+?) 🕒 (.+)'
for line in today_courses:
match = re.search(pattern, line)
if match:
name, teacher, place, time = match.groups()
msg += f"| {name.strip()} | {place.strip()} | 🕒 {time.strip()} |\n"
else:
msg += f"| {line.strip()} | - | - |\n"
else:
msg += "🎉 今天没有课或登录失败"
msg += f"\n\n🍵 **每日一言**:_{quote}_\n\n🕓 **推送时间**:{send_time}\n\n**Leisure💗李彤彤**"
🎉 效果展示
💡 创作想法
由于女朋友每天上课时间不固定,容易忘记课程安排,因此希望实现一种自动提醒方式,结合以下目标:
- 自动登录教务系统
- 提取本周课表,并根据当前日期定位当天课程
- 加入天气预报与每日情话,让推送更具温度
- 利用 PushPlus 与 Bark 实现多终端推送
🧠 实现思路
模拟登录
- 解析登录页获取
salt
值 - 使用
hashlib.sha1
进行密码加盐加密
- 解析登录页获取
获取课表数据
- 获取
semester.id
与学生ids
- 使用
courseTableForStd!courseTable.action
接口提交 POST 请求,获取课程 JS
- 获取
解析课程表 JS
- 通过正则匹配
TaskActivity(...)
构造函数提取课程信息 - 解析出课程名、教师、教室、节次等
- 通过正则匹配
当日筛选与排序
- 根据
datetime.now().weekday()
匹配当天课程 - 按上课时间进行排序,构建 Markdown 表格
- 根据
天气与情话 API
- 调用天行数据天气 API
- 随机调用多个情话 API 接口
多平台推送
- PushPlus:支持个人和群组
- Bark:iOS 原生推送
🚀 部署教程
✅ 环境要求
- Python >= 3.10
- 安装依赖:
requests
,beautifulsoup4
🧩 环境变量
Name | Value |
---|---|
USERNAME | 你的学号 |
PASSWORD | 教务系统密码 |
PUSHPLUS_TOKEN | PushPlus Token |
BARK_URL | Bark 推送地址 |
TIANAPI_KEY | 天行天气 API Key |
📦 青龙面板部署
青龙面板搭建教程
点我跳转
1. 将脚本文件上传到青龙面板
脚本下载地址
点我跳转
2. 安装所需依赖
3. 在青龙环境变量中添加所需变量
添加以下变量:
Secret 名称 | 说明 |
---|---|
PUSHPLUS_TOKEN | PushPlus 的 token |
BARK_URL | Bark 推送服务地址(可选) |
USERNAME | 教务系统账号(必填) |
PASSWORD | 教务系统密码(必填) |
TIANAPI_KEY | 天行api(可选) |
如果你只使用 PushPlus,只需设置 PUSHPLUS_TOKEN
。
4.创建定时任务
- 脚本将于 每天早上 7:00(北京时间) 自动执行
- 可通过修改
cron
表达式自定义时间
🧬 GitHub Action 部署
✅ 1. Fork 本项目
点击进入该项目库
点击右上角 Fork
按钮,将项目复制到自己的 GitHub 仓库。
🔐 2. 配置 Secrets
进入你的仓库:
Settings → Secrets → Actions → New repository secret
添加以下变量:
Secret 名称 | 说明 |
---|---|
PUSHPLUS_TOKEN | PushPlus 的 token |
BARK_URL | Bark 推送服务地址(可选) |
USERNAME | 教务系统账号(必填) |
PASSWORD | 教务系统密码(必填) |
TIANAPI_KEY | 天行api(可选) |
如果你只使用 PushPlus,只需设置 PUSHPLUS_TOKEN
。
⚙️ 3. 启用 GitHub Actions
Fork 后默认不会自动执行,需要手动启用:
进入仓库主页 → 点击 Actions
→ 点击 I understand... Enable workflows
📆 4. 自动运行逻辑
- 脚本将于 每天早上 7:00(北京时间) 自动执行
- 可在
push.yml
中修改cron
表达式自定义时间
📄 配置项说明
- ENABLE_PUSHPLUS = True # 控制是否启用 PushPlus 推送
- ENABLE_BARK = True # 控制是否启用 Bark 推送
- 第358行的
Leisure💗Tiffany
可自行修改为自己的内容
✍️ 后记
实现这个脚本,解决了每天手动查看课程的烦恼。结合天气和情话,也让每天的提醒多了点温暖。
未来考虑增加:
- 节假日与调休识别
- 自定义课表备注支持
📄 开源声明
本项目已在Github开源 项目地址
本文代码部分采用 MIT License 开源,欢迎自由使用、改进并署名引用。
文章内容(含图文说明、教程思路等)采用 CC BY-NC-SA 4.0 授权,转载请注明出处,非商业使用,保持一致协议。
转载请注明:Leisure's Blog
欢迎大家一起使用 & 改进这个项目!
💗 如果你喜欢这个项目,请点个赞或者 Star 🌟 吧~