如何通过Moodle Webservice API下载指定问卷的报告数据?
通过API下载Moodle指定问卷的全部报告数据
前提准备
- 确保Moodle站点已启用Web服务(路径:站点管理 → 高级功能 → 启用Web服务)
- 创建具备
mod/questionnaire:viewreports权限的Web服务用户,并分配目标问卷的访问权限 - 创建外部服务,关联所需权限,生成有效的Web服务令牌(token)
实现方案
Moodle默认Web服务没有直接提供问卷报告下载的专属函数,可通过模拟手动下载请求+Web服务令牌认证实现:
- 构造请求URL
将手动下载链接与Web服务令牌结合,最终URL格式如下:
https://xxxxx/mod/questionnaire/report.php?instance=1266&action=dwnpg&group=0&wstoken=YOUR_TOKEN
其中:
instance=1266:目标问卷的实例ID(与手动链接一致)action=dwnpg:指定下载报告的动作group=0:表示下载所有组的提交数据wstoken=YOUR_TOKEN:替换为你生成的Web服务令牌
- 发送请求并保存文件
以Python为例,使用requests库实现:
import requests # 配置参数 moodle_base_url = "https://xxxxx" token = "你的Web服务令牌" questionnaire_instance = 1266 group_id = 0 # 拼接下载URL download_url = f"{moodle_base_url}/mod/questionnaire/report.php?instance={questionnaire_instance}&action=dwnpg&group={group_id}&wstoken={token}" # 发送GET请求并保存报告 response = requests.get(download_url) response.raise_for_status() # 捕获请求异常 # 根据实际下载格式调整扩展名(如.xls/.csv) with open("问卷报告.csv", "wb") as file: file.write(response.content)
常见问题排查
- 权限不足:确认Web服务用户拥有
mod/questionnaire:viewreports权限及目标问卷的访问权限 - 令牌无效:检查令牌是否与正确的用户、外部服务关联,是否过期
- 请求失败:验证URL参数是否正确,尤其是
instance和group值是否匹配实际场景 - 格式错误:根据问卷设置的报告格式调整保存文件的扩展名
内容的提问来源于stack exchange,提问作者jiradett kerdsri
相关产品推荐
相关产品推荐

