导入课表
三种导入方式
打开 App,切换到"管理"标签页,点击"导入课表"按钮。底部会弹出一个面板,提供三个选项:
方式一:教务系统登录(推荐)
点击"从教务系统导入"打开学校选择页面。这是最推荐的导入方式——直接连接到学校的教务系统,通过内嵌浏览器登录后自动抓取你的课表数据,不需要手动输入任何课程信息。Sleepy 目前支持 9 种中国大学教务系统协议,涵盖金智(Wisedu)、强智(Qiangzhi,含 5 个子变体)、正方(Zhengfang,含 3 个子变体)、URP(含 2 个子变体)、青果、北大、北师珠等主流教务系统。操作步骤:
- 搜索你的学校——在搜索框中输入学校全称或拼音首字母(例如输入"HEU"或"哈工程"来找到哈尔滨工程大学)
- 选择你的学校——从搜索结果中点击你的学校名称。App 会打开一个内嵌的 WebView 浏览器窗口,加载学校教务系统的登录页面
- 登录教务系统——在 WebView 中像平时在浏览器里一样,输入你的学号和密码。如果系统弹出了验证码,同样在 WebView 中手动输入。整个登录过程在 App 内部完成,你的账号密码不会被 Sleepy 记录或上传
- 登录成功——App 会自动注入一段 JavaScript 桥接代码(WiseduBridge),从教务系统的页面中提取课表数据。这个过程对用户完全透明,你只需要等待几秒钟
- 预览核对——数据提取完成后,会跳转到一个预览页面。这里列出了检测到的课程总数、和当前课表中已有课程存在时间冲突的课程数、检测到的课表名称和学期起始日期。请仔细核对这些信息是否正确——如果课程数量明显不对或者时间完全错误,不要点确认,点返回重新尝试或换一种导入方式
- 选择导入模式并设置学期参数——在预览页面底部选择如何处理这些课程(替换当前/另存为新课表/追加不冲突,详见下文),并确认学期起始日期(第 1 周的周一)和作息时间(每节课的开始和结束时间)
方式二:粘贴文本
点击"粘贴文本"展开输入区域:
- 将你的课表文本粘贴到输入框中。文本来源不限——从其他 App 复制的、从微信或 QQ 聊天消息中收到的、从学校网站复制粘贴的——全部可以
- 点击"预览"按钮。App 会自动扫描文本的前几个字符来判断格式,然后调用对应的解析器
支持的 6 种文本格式(App 会自动检测,无需手动选择):
| 格式 | 识别特征和来源 |
|---|---|
| WakeUp 分享文本 | 文本以 [WakeUp Schedule] 前缀开头——从 WakeUp 课表 App 的分享菜单中复制出来时,WakeUp 会自动在文本最前面加上这个标记。这是最可靠的一种格式,因为 WakeUp 的分享格式是固定的 |
| Sleepy / WakeUp JSON | 以 {"course 或 [{" 开头的标准 JSON 格式。这是 Sleepy 自己的交换格式,也是 WakeUp 导出 JSON 时使用的格式。如果你之前从 Sleepy 用"导出课表"功能导出了 JSON 文件,用这个格式重新导入可以达到完美的数据还原 |
| ICS 日历 | 包含 BEGIN:VEVENT 行的 iCalendar 格式。这是苹果日历、Google 日历、Outlook 日历通用的日历交换格式。很多大学的教务系统支持将课表导出为 ICS 格式的 .ics 文件 |
| CSV 表格 | 由制表符(Tab 键,不是逗号)分隔的纯文本表格。第一行是表头(列名),后续每行是一条课程记录。支持中文表头(如"课程名称"、"教师"、"教室"等)和英文表头。周次字段支持多区间写法,例如 2-5,7-9,11-14 表示这门课在第 2 到第 5 周、第 7 到第 9 周、第 11 到第 14 周上课 |
| HTML 网页 | 包含 <table> 标签的 HTML 源码。这种格式通常来自直接从教务系统网页上用浏览器的"查看页面源代码"功能复制下来的内容 |
| 纯文本 | 由制表符或空格分隔的纯文本。当文本不匹配上述任何格式的特征时,作为兜底方案使用最基本的按分隔符解析逻辑 |
方式三:从文件导入
点击"从文件导入"打开系统的文件选择器。选择一个课表文件(支持 .json、.txt、.csv、.html 扩展名),App 会自动读取文件内容并按照上述格式检测逻辑进行解析。你也可以从其他 App(如手机自带的文件管理器、微信收到的文件)中直接打开课表文件——系统会弹出"用什么应用打开"的选择菜单,选择 Sleepy 即可跳转到导入预览页面。
预览和三种导入模式
无论使用哪种导入方式,解析完成后都会弹出一个预览对话框,显示以下信息让你在写入数据之前做最后的核对:
- 课程数量——从输入的文本或文件中一共解析出了多少门课程
- 冲突课程数——在这些解析出的课程中,有多少门课程和当前课表中已经存在的课程存在时间重叠(即同一时间段的同一星期已经安排了另一门课)。冲突检测的逻辑是:两门课在同一天的同一节次有重叠即视为冲突
- 可安全追加数——完全没有时间冲突、可以直接安全导入的课程数量。这个数字等于课程数量减去冲突课程数
预览完毕之后,在对话框底部选择一种导入模式:
替换当前课表
清空当前课表中的所有已有课程,用新导入的课程完全替换。旧课表中的所有课程数据将被永久删除(仅限当前这张课表,不会影响你创建的其他课表)。适合以下场景:你是第一次导入课表,当前课表是空的或者只有测试数据;你确定新导入的数据比现有的数据更准确,想要全部重来;学期切换后想要用新课表完全覆盖旧课表。
另存为新课表
创建一张全新的空白课表,把导入的课程全部放进这张新课表中。你现有的课表保持不动,完全不受影响。新创建的课表会自动获得一个名称(基于导入文本中检测到的学期信息,如果检测不到则使用默认名称"导入的课表"加上数字序号)。适合以下场景:你想同时保留多张课表做对比;你要导入的是不同学期的课表,不想和当前课表混在一起;你想先用新课表看看导入效果,确认无误后再切换到它。
追加(仅不冲突的课程)
只导入那些和现有课程没有时间冲突的课程。冲突的课程会被自动跳过,不会覆盖或影响你已有的课程安排。预览页面会用颜色标注——红色数字表示冲突的课程(不会被导入),绿色数字表示可以安全导入的课程。适合以下场景:你已经在课表里手动添加了一部分课程,现在想从教务系统补充剩下的课程;你只想导入新增的课程,不想改动已有的安排。
选择导入模式之后,你还可以在下方的设置区域中调整学期起始日期(第 1 周星期一的日期——这个日期决定了 App 如何计算"当前是第几周")和作息时间(每一节从几点几分开始、到几点几分结束——这个设置决定了课程色块在课表视图中的垂直位置)。