用途:通过 Canvas REST API 组装完整课程。Canvas 没有“一键建课”接口,课程由多个独立资源拼成,难点在顺序、发布状态与幂等,而非单个 HTTP 调用。
主要能力:创建课程外壳、章节、作业分组、文件(三步上传)、页面、作业、讨论、Classic 与 New Quizzes 测验及题目、模块与模块项、首页与大纲、选课,并控制发布。附带 scripts/canvas_client.py(认证、分页、编码、限流重试、文件上传)与 scripts/build_course.py(按 YAML/JSON 课程规格按依赖顺序幂等构建,支持 --dry-run)。
使用方式:先读取环境变量 CANVAS_API_URL 与 CANVAS_API_TOKEN,用 GET /api/v1/users/self 与 /api/v1/accounts 确认身份与权限。按依赖顺序构建:课程外壳(保持未发布)→ 章节 → 作业分组 → 文件 → 页面/作业/讨论/测验 → 模块 → 模块项 → 首页/大纲 → 选课 → 最后发布模块与课程。示例:export CANVAS_API_URL=https://school.instructure.com CANVAS_API_TOKEN=...;python scripts/build_course.py course.yaml --account 1 --dry-run;去掉 --dry-run 正式执行;--course 12345 填充已有课程。依赖 requests,YAML 规格还需 pyyaml。
适用场景:脚本化、可重复的建课;复制或迁移已有课程时优先用 Content Migrations API(course_copy_importer 或 common_cartridge_importer);大规模名单用 SIS Imports。
限制与注意:Canvas 无 upsert,需用清单文件或按标题匹配保证幂等;模块内页面用 page_url 引用而非 ID;设置课程日期须同时设 restrict_enrollments_to_course_dates;offer、enroll_me、skip_course_template、enable_sis_reactivation 为顶层参数;集合默认每页 10 条,用 per_page=100 并跟随 Link 头;限流按令牌计,403/429 需指数退避并降并发;富文本为服务端清洗的 HTML。首次运行建议用沙箱子账户或测试课程。具体收费与价格暂未提供。