bjtuo-classroom-query
BJTU Classroom Query
基于 Playwright 的北交大教室查询自动化工具。
数据来源
| 数据源 | 能力 | 是否需要登录 |
|---|---|---|
| 教务系统(Playwright 脚本) | 课表占用:哪些时间段有课 | ✅ 需要 |
| 实时人数接口(第三方) | 当前教室在场人数 | ❌ 不需要 |
两者结合可以得出综合结论:当前有无课 + 实际人数 → 教室是否值得去。
核心功能
- AI 登录:集成智谱 AI 视觉模型,自动识别 CAS 登录页面的数学计算验证码。
- 状态缓存:自动保存登录状态 (
auth_state.json),避免频繁登录触发验证。 - 智能选择:支持学期、周次、教学楼的模糊匹配和自动选择。
- 空闲分析:自动解析教务系统复杂的表格结构,提取每日空闲的大节信息。
- 实时人数:调用第三方接口,获取教室当前在场人数和容量。
快速开始
1. 配置环境
确保项目根目录下存在 .env 文件,并包含以下配置:
ZHIPU_API_KEY=your_zhipu_api_key
BJTU_USERNAME=your_username
BJTU_PASSWORD=your_password
2. 运行查询
# 查询当前学期(自动推断)第14周 思源东楼 102 的空闲情况
uv run bjtuo-classroom-query/scripts/query_classroom.py --week "14" --building "思源东楼" --classroom "102"
# 指定学期
uv run bjtuo-classroom-query/scripts/query_classroom.py --semester "2025-2026-1" --week "14" --building "思源东楼"
参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
--week |
周次 (1-31) | 14 |
--semester |
学期代码 | 2025-2026-1 |
--building |
教学楼 (支持模糊匹配) | 思源东楼, 九教, 东一 |
--classroom |
教室号 (可选) | 102 |
--show-browser |
显示浏览器窗口(默认无头模式) | (标志位) |
实时人数查询(无需登录)
接口:GET http://yaya.csoci.com:2333/api/classnum/?building={教学楼名称}
第三方接口,非学校官方,数据约每 10-20 秒更新一次。
# 查询思源东楼实时人数(中文参数必须 URL 编码)
curl "http://yaya.csoci.com:2333/api/classnum/?building=%E6%80%9D%E6%BA%90%E4%B8%9C%E6%A5%BC"
返回格式:
{
"time": ["2026-02-05 13:13:07", "2026-02-05 13:13:25"],
"data": [
["SY101", 5.55, 5, 90],
["SY102", 15.62, 5, 32]
]
}
| 字段 | 说明 |
|---|---|
time |
数据采集时间范围 |
data[i][0] |
教室名称 |
data[i][1] |
占用率 % |
data[i][2] |
当前人数 |
data[i][3] |
总容量 |
注意:当 人数 >= 容量 时,通常为传感器异常,数据不可信。
支持的教学楼(共 11 栋,见 数据参考)
综合查询工作流
当用户询问"XX教室现在能去吗"、"哪个教室空着"等问题时,按以下步骤执行:
Step 1:查课表(有无上课)
uv run bjtuo-classroom-query/scripts/query_classroom.py \
--week "<当前周次>" --building "<教学楼>" --classroom "<教室号>"
得到:该教室今天各节课的占用情况。
Step 2:查实时人数
curl "http://yaya.csoci.com:2333/api/classnum/?building=<URL编码后的楼名>"
从返回的 data 数组中找到对应教室,读取 [人数, 容量]。
Step 3:综合给出结论
| 课表状态 | 实时人数 | 结论 |
|---|---|---|
| 当前节次无课 | 人数少(< 容量30%) | ✅ 空闲,推荐 |
| 当前节次无课 | 人数多(≥ 容量30%) | ⚠️ 虽无课但人多,可能有人自习 |
| 当前节次有课 | 人数多 | ❌ 正在上课,不要去 |
| 当前节次有课 | 人数少 | ⚠️ 课表显示有课但人少,可能已结束或取消 |
输出示例:
思源东楼 102(SY102)
- 课表:本节(第3节)无课,下节(第4节)有课
- 实时:当前 5 人 / 32 座(15.6%)
- 结论:✅ 现在可以去,但第4节前需离开
数据参考
More from hwj123hwj/custom-skills
bilibili-toolkit
B 站综合工具箱。集成视频下载、文稿采集、向量知识库构建、语义检索问答及 UP 主人格画像分析等功能。
26bilibili-video-helper
搜索、分析和提取 Bilibili 视频的综合工具。每当用户提到 B 站、bilibili、提供 B 站链接(bilibili.com, b23.tv)、要求搜索特定视频、提取视频元数据(标题、UP主、播放量、简介)、获取视频字幕、获取评论或弹幕进行分析总结时,必须触发此技能。支持处理 412 风控引导及 Cookie 注入。
20skill-browser-crawl
基于浏览器的轻量级网页爬虫。支持 JavaScript 渲染、Markdown 提取,并能递归爬取文档类网站。
16idea-incubator
专业的 CPO + 技术合伙人助手,帮助用户孵化想法、分析可行性并编写技术文档。适用于当你有新产品想法、技术方案或“灵光一现”需要结构化整理时。
10media-analyze
媒体分析报告生成。多源搜索话题,自动生成结构化分析报告。触发场景:(1) 用户要求分析某个话题 (2) 需要生成话题调研报告 (3) 了解事件的舆论反应。关键词:分析话题、媒体报告、话题调研、舆论分析。
4wechat-search
用于搜索微信公众号文章的工具。每当用户要求搜索“微信公众号文章”、“微信文章”、或者通过关键词寻找特定话题(如“搜一下AI进展”)时,必须触发此技能。本技能负责搜索文章列表(标题、链接、摘要)。
3