Intro

在水源上刷到了一个将 Canvas 的事项同步到 Microsoft To Do 的项目:

https://github.com/1357310795/TodoSync/

不过由于笨人并不使用 Microsoft To Do,通常使用 Apple Reminder & Calendar(提醒事项与日历)来管理作业与日程,加之今年的 iOS / iPadOS / macOS 使得提醒事项中的内容可以直接显示在日历中,于是便想要使用快捷指令(Shortcuts)来制作一个自动获取并添加提醒事项的脚本。

关于快捷指令
https://support.apple.com/zh-cn/guide/shortcuts/welcome/ios

快捷指令是一种可让你使用 App 完成一个或多个任务的快捷方式。“快捷指令” App 可让你创建包含多个步骤的快捷指令。例如,你可以构建一个“冲浪时间”快捷指令来获取冲浪报道、提供预计到达海滩的时间以及播放冲浪音乐播放列表。

每个快捷指令皆由一个或多个操作组成。操作是快捷指令的组成部分,是任务中的单个步骤。混合搭配操作来创建可与 Apple 设备上的 App 和内容以及互联网上的内容和服务交互的快捷指令。

快捷指令也支持给定触发器的自动化操作,例如定时抓取作业列表。



使用教程

  1. 首先从 iCloud 获取这条快捷指令:

  2. 打开学校的 Canvas 平台生成令牌(常见高校 Canvas 地址见文末)

    • 点击左上角个人头像

    • 点击设置

      canvas-personal

    • 向下滑动,在“允许融入使用的外部软件”中找到“创建新访问许可证“

      generating-canvas-key

    • 添加备注,并过期日期留为空白以使其不会过期,然后点击“生成令牌”

      generating-confirm

    • 生成令牌后,复制“令牌”栏后的令牌内容。

      注意:令牌只显示这一次,请立即复制并保存令牌到你可信任的地方。令牌拥有者可以代你执行任何 Canvas 上的操作。

  3. 打开快捷指令,填入刚刚的访问令牌

    • save-access-token
  4. 填入学校的 Canvas 地址

    • 常见高校 Canvas 地址见文末,填写链接的时候务必记得在最后添加 /

    • save-canvas-link

  5. 到这里就可以运行啦!运行完毕后你应该会在提醒事项里看到已经同步的课程作业



自定义

其实这件事使用 Python 可以很方便地搞定的,但是要写入 Apple 提醒事项的话似乎也只能用快捷指令

快捷指令虽然强大,但是对于基本的 forwhile 循环的支持做的很难用:只支持固定次数的重复和对给定词典的遍历,且不支持 break 等操作。由于 Canvas 在课程或作业较多时采取分页返回,所以这里只能采取一个笨办法:多遍历几次,反正空的页面不会造成影响。

识别方法

通过提醒事项中的 URL 字段存储作业链接,当匹配到链接相同时就更新而非新建。因此创建后最好不要手动修改 URL 部分内容,否则下次也许会重复添加。

添加事项

你可也可以把添加到提醒事项改为添加到日历,定位到注释“添加到提醒事项”部分,然后修改对应模块即可。

自动化

打开 iOS 或 iPadOS 上的快捷指令,打开自动化页面,然后添加定时执行的快捷指令。

记得从“确认后运行”改为“立即运行。

automation



常见高校 Canvas 地址:

  • 上海交通大学

    • https://oc.sjtu.edu.cn/
    • 经测试可用
  • 北京大学

    • https://pku.instructure.com/
    • 应该可用
  • 复旦大学

    • https://elearning.fudan.edu.cn/
    • 应该可用
  • 香港大学

    • https://hku.instructure.com/
    • 应该可用
  • 同济大学

    • https://canvas.tongji.edu.cn/
    • 应该可用
  • 山东大学

    • https://e-learning.sdu.edu.cn/
    • 应该可用



Notes

感谢 TodoSync 项目(https://github.com/1357310795/TodoSync/)带来的灵感。