用途:通过 Canvas REST API 组装完整课程。Canvas 没有“一键建课”接口,课程由多个独立资源拼装,难点在顺序、发布状态与幂等性。
主要能力:创建课程外壳、章节、作业组、文件、页面、作业、讨论、经典测验与 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。
限制与注意:Canvas 无 upsert,需用清单文件或按标题匹配保证幂等;模块内页面用 page_url 而非 ID;课程日期需 restrict_enrollments_to_course_dates 才生效;offer、enroll_me、skip_course_template、enable_sis_reactivation 为顶层参数;分页用 Link 头 rel=next,per_page=100;限流按令牌漏桶,403/429 需退避;富文本为服务端清洗的 HTML。复制或导入课程应优先用 Content Migrations API,大规模名册用 SIS Imports。生产环境建课不可逆,建议先用沙箱或测试课程。