「瞎鼓捣」华东师范大学课表一键导入 iOS/iPadOS 日历

2020-02-11
摘要: 「瞎鼓捣」利用快捷指令 app 一键导入华东师范大学课表至 iOS/iPadOS 日历。

封面

GitHub:
https://github.com/JJAYCHEN1e/ECNU_Bring-Your-Timetable-to-Calendar-App

捷径社区:
https://sharecuts.cn/shortcut/4812

(⚠️注:捷径社区是第三方快捷指令托管平台。打开捷径社区后选择安装捷径即可)

这是什么?#

我相信每个人都经历过开学初把课程表手动添加到自己日程表的痛苦。当然也有一些妥协的解决办法,比如安装像超级课程表 这样的 app,比如把手机壁纸/聊天背景设置成课表截图。但是,我无法忍受手机中多安装一个只为了看课表而存在的 app,也无法忍受拿起手机就可以看到的漂亮壁纸不得不换成单调而又枯燥的课表。算是个爱折腾的人,自然想要找到一个优雅的方法去解决这个痛点。

于是,受 BillChen2000 - ECNU-class2ics 的启发,决定用每台 iPhone/iPad 都默认安装的快捷指令 app 让更多的非计算机系同学能够简单地导入自己的课表。配合 “下个日程” 组件,可以方便地在负一屏中看到下一日程;配合 iCloud,你的课表可以在 iPhone/iPad/Mac/Apple Watch 下自动同步

怎么用?#

少啰嗦,先看东西。 – 罗永浩

操作示意

再等待快捷指令完成即可。

简单来说,步骤如下:

  1. 添加本快捷指令(具体注意事项参阅下文使用前必看的注意点章节)。
  2. 在 iPhone 或 iPad 的 Safari 中打开华东师范大学公共数据库登录主页(⭐️注意要在 Safari 中打开,不能使用微信内浏览器)。
  3. 手动或自动填充公共数据库账号与密码(无需填写验证码)。
  4. 打开 Safari 浏览器的 Share Sheet,选择 华东师范大学课表导入 快捷指令。
  5. 根据提示输入登录的验证码、开学日期等。等待捷径完成,它可能需要二十秒左右的时间。(第一次运行需要同意数次向华东师范大学公共数据库发送网络请求的操作,并且很大概率同意完会意外停止,多运行几次即可,一般三次就好)

至此,你的课表就已经添加至你的日历中了。效果如下

“下个日程” 组件效果 与 iPhone 日历 app 效果
Mac 日历 app 效果
iPad 日历 app 效果

使用前必看的注意点#

  • 如果你从来没有使用过快捷指令 app,你可能需要在快捷指令 app 内随意运行一个快捷指令来解锁该应用(否则你会遇到下一点中无法信任第三方快捷指令的问题)。如果你不小心/故意删除了快捷指令 app,你可以在 App Store 中搜索并下载它。

  • 前往:设置–快捷指令–共享安全性 ,打开允许不受信任的快捷指令。这样才能够运行来自他人分享的快捷指令。如图所示:

    允许不受信任的快捷指令 和 添加不受信任的快捷指令
  • 打开本快捷指令的 共享链接。点击获取快捷指令后会自动跳转至快捷指令 app,在最下方选择添加不受信任的快捷指令。如上图所示。

  • 由于目前没有制作学期选择器(之后会考虑加入),需要在快捷指令内编辑学期 ID,默认值为** 2019-2020 学年第二学期**。因此,你大概不需要编辑,我应该会在 2020 学年开始前完成这个功能..

  • 请务必选择正确的开学日期,且务必要选择周一,否则课程时间一定是错的。

  • 👉 为了方便管理自动添加的日程,建议在日历 app 中新建一个日历,并在快捷指令运行时选择它,例如新建一个名为 “2019-2020 学年第二学期课表” 的日历。

    新建日历 和 选择目标日历
  • 可能只有本科生可以使用 :D

  • 每次更新需要重新添加快捷指令。

写在后面#

不成功怎么办?#

由于该快捷指令用到了许多对公共数据库的网络请求,因此成功率受网络情况波动。根据测试,第一次运行时需要允许许多权限,有较大概率同意完会闪退,只需要重新运行几次即可。另外,iPad 上的成功率似乎比 iPhone 上高(玄学⚠️)。

如果校园网开启了网络管制,那么需要打开学校的 VPN 才能够正常使用。另外,打开学校的 VPN 可能会提高网络请求的可靠性(玄学⚠️)。

总的来说,一般都会成功,如果失败的话关闭 Safari 后台,重新运行即可🚀。

我的账号安全吗?#

由于华东师范大学数据库不是明文登录的,需要本地先对用户名密码进行加密再登录。为了能够让用户感觉到 “安心”,我选择在本地执行加密(在网页上运行 JavaScript 代码),并未将数据上传到任何第三方服务器。这也就是这个快捷指令一开始需要从华东师范大学数据库开始执行的原因。

What happens on your iPhone, stays on your iPhone. – Apple Privacy Team.

未来是不是会考虑通过服务器处理?#

因为本地处理存在失败的可能,并且会多一个打开公共数据库的步骤。如果能够得到用户的信任,其实可以考虑制作一个将用户的用户名密码发送至服务器处理并返回结果的版本。
Anyway,以后再说。

Android 用户怎么办?#

嗯.. 是很严肃的问题.. 对于部分同学来说应该会至少拥有 iPhone/iPad 其中之一,那么都没有的话,身边的同学应该会至少拥有 iPhone/iPad 其中之一。只要任意一台 iOS/iPadOS 设备运行快捷指令后,日历可以导出为通用的 ics 文件,就可以在任意日历 app 中使用了。不过似乎 iOS/iPadOS 的系统日历不支持导出,Mac 版是可以的。可以尝试 iCloud 网页版日历或者第三方 app 读取系统日历后是否可以导出。(2020-02-20 更新:参考教程。亲测可用,文中提到的已失效的改 http 的方法实测也是有用的)

怎么做到的?#

你可以直接查看快捷指令的每个步骤,因为它是公开的。具体来说,有以下步骤:

  1. 根据账号密码生成密钥,登录华东师范大学公共数据库。
  2. 在数据库中获取 ids,用户得到指定学期的课程表。
  3. 在课程表中获取您的课程列表,在开课信息中查询指定学期对应的开课信息。
  4. 利用正则表达式提取开课信息中的日期、时间、地点等。
  5. 根据得到的信息添加日程。
    这里需要提到的是,在正则表达式的处理中,大部分单双周的情况是可以处理的。由于没有进行特殊处理,如果是在学期中途添加日历且可能某一门课有停课信息,你的日历中也会添加当天课程,只不过地点为“停课”。具体的 Pattern 可能以后会补充这里。