如何通过Web service API获取Moodle全课程待提交作业及完成状态
Moodle获取全课程作业及完成状态实现方案
核心需求
获取所有课程下的全部作业及其学生侧完成状态,即Moodle控制面板时间线板块展示的内容。
现有接口问题梳理
- 调用
core_course_get_enrolled_courses_by_timeline_classification传入classification=inprogress可获取学生所有进行中课程,但仅能返回课程基础信息,不含作业相关数据 - 调用
mod_assign_get_assignments传入上述接口返回的课程ID可批量获取多门课程作业信息,但不支持返回学生侧作业完成标记状态 - 调用
core_course_get_contents可返回单门课程所有活动的完成状态,但存在两个明显缺陷:仅支持单次查询单门课程、会返回课程下所有模块全量活动数据,冗余度极高
各接口参数说明
1. core_course_get_enrolled_courses_by_timeline_classification
必填参数
classification:分类筛选值,可选值包括inprogress(进行中)、future(未开始)、past(已结束)、favourites(收藏)、all(全部),按需传入即可
可选参数
limit:返回结果数量限制,默认0即返回全部offset:分页偏移量,默认0sort:排序规则,默认按课程最后访问时间倒序
2. mod_assign_get_assignments
必填参数
无全局必填参数,若需要限定返回指定课程的作业,需传入:
courseids[0]、courseids[1]...:要查询的课程ID数组,支持同时传入多门课程ID批量查询
可选参数
capabilities[0]、capabilities[1]...:按用户权限筛选返回的作业,默认不需要传入includenotenrolledcourses:是否返回用户未选课的课程作业,默认值0(否)
3. core_course_get_contents
必填参数
courseid:要查询的单门课程ID
可选参数
options[0][name]、options[0][value]:配置返回内容规则,可配置项包括excludemodules(排除指定模块)、excludecontents(仅返回模块基础信息不返回内容详情)等,可一定程度降低数据冗余
优化方案补充:core_completion_get_activities_completion_status
替代
core_course_get_contents查询作业完成状态,仅返回指定活动的完成状态,无冗余数据
必填参数
courseid:要查询的课程IDuserid:要查询完成状态的用户ID,传入当前登录用户ID即可
实现逻辑
先通过mod_assign_get_assignments批量拿到所有课程的作业ID后,按课程分组调用该接口,即可批量获取每门课程下所有作业的完成状态,数据量远小于core_course_get_contents返回结果
内容的提问来源于stack exchange,提问作者Sujit
相关产品推荐
相关产品推荐

