在创建与 Canvas 的自动化数据集成时,您应该练习使用 API 将 SIS 数据导入 Canvas。使用 API 的一种方法是通过 cURL,这是一个用于传输数据的命令行工具,所有操作系统(Windows、Linux 和 OSX)都支持它。本课程中的示例适用于 Windows 7+、Windows Server 2003+、Ubuntu 12+(桌面版/服务器版)以及 OSX Mountain Lion+。
本课中的示例旨在帮助您学习如何使用 API 通过 SIS 导入将内容导入 Canvas。
安装 cURL
请确保您的计算机或操作系统已正确安装 cURL。
OS X 和 Linux(Ubuntu)
cURL 应该已经安装好,并且可以从终端应用程序运行。
cURL 可能已经安装。如果尚未安装,请使用具有 sudo 权限的用户运行以下命令:
sudo apt-get install curl
安装 cURL 后,请在终端或命令提示符中输入以下命令来测试安装:
curl --version
如果安装成功,应该会显示 cURL 的版本。
视窗
如果您计划使用 Windows 作为导入服务器,建议您在生产环境中使用 PowerShell 而不是 cURL 作为导入工具。PowerShell 是 Windows 的原生工具,与使用 cURL 和批处理文件相比,它能生成更可靠的导入脚本。我们仅建议在 Windows 上使用 cURL 进行测试。 了解如何在 Windows 上安装 PowerShell。
导入测试文件
在添加脚本的复杂性之前,先练习使用 API。
- 在“tmp”目录下,创建一个名为\P\P\P\P的CSV文件,该文件将创建一个基础课程。文件名区分大小写。或者,您也可以使用示例文件: test_course.csv
- 打开终端命令提示符,并将目录更改为“tmp”目录。
- 运行以下命令,将 <api_token> 替换为您之前创建的 API 令牌,将 <canvas_fqdn> 替换为您用于访问 Canvas 的域名(例如:institution_name.test.instructure.com):
curl -F attachment=@test_course.csv -H "Authorization: Bearer <api_token>" 'https://<canvas_fqdn>/api/v1/accounts/self/sis_imports.json?import_type=instructure_csv'
成功后,您应该会收到服务器返回的 JSON 字符串,其中指示导入已创建,并提供导入作业的 ID。JSON 字符串大致如下所示:
{"created_at":"2014-02-27T13:03:39Z","ended_at":null,"updated_at":"2014-02-27T13:03:39Z","progress":0,"id":6670997,"workflow_state":"created","data":{"import_type":"instructure_csv"}}在编写脚本时,“id”和“workflow_state”参数是需要了解的重要信息。它们的缺失或值不正确可能表明存在问题。如果您没有获得“id”参数,或者您的“workflow_state”值不正确,则说明脚本存在问题。如果标签不是已创建,则需要先排查原因才能继续。
笔记:
- 该命令完成后,您需要使用“id”参数来检查导入状态。
- 导入节 CSV 文件时,如果导入文件中未包含
integration_id列,则会保留现有的integration_id值。要删除integration_id ,必须使用change_sis_id.csv文件显式取消设置。
检查进口状态
自动导入流程的一个重要部分是在处理下一次导入之前了解上一次导入的状态。
如果您选择执行标准导入,则必须在处理下一次导入之前修复之前的导入,因为失败/不完整的导入作业可能会导致信息丢失。如果您使用整批导入,状态仍然很重要,因为您不希望在前一个批次完成之前开始下一个整批导入。根据您的更新频率、导入大小和其他因素,整批导入很容易超出您的时间窗口。
请使用以下替换运行以下命令:
- 请将 <api_token> 替换为之前创建的 API 令牌。
- 请将 <canvas_fqdn> 替换为您的 Canvas 域名
- 将 <import_id> 替换为测试文件导入中的 ID
curl -H "Authorization: Bearer <api_token>" 'https://<canvas_fqdn>/api/v1/accounts/self/sis_imports/<import_id>'
如果导入完成,该命令应返回包含状态和结果的 JSON 响应。以下是运行上述命令的结果示例:
{"created_at":"2014-02-27T13:03:39Z","ended_at":"2014-02-27T13:03:39Z","updated_at":"2014-02-27T13:03:39Z","progress":100,"id":6670997,"workflow_state":"imported","data":{"import_type":"instructure_csv","supplied_batches":["course"],"counts":{"accounts":0,"terms":0,"abstract_courses":0,"courses":1,"sections":0,"xlists":0,"users":0,"enrollments":0,"groups":0,"group_memberships":0,"grade_publishing_results":0}}}以下是关于 JSON 结果需要考虑的几个关键点:
进度:在运行中的作业中,“进度”参数表示作业的完成百分比。作业运行完毕后,进度将为 100%。
workflow_state :`workflow_state` 参数指示正在运行的作业的当前状态。大多数情况下,成功完成的作业状态会显示为“已导入”。如果状态不是“已导入”或“正在导入”,则需要在此处停止并排查原因,然后再继续。
- 如果状态为“导入中”,请再次运行该命令,直到状态返回“已导入”。
- 如果状态为“imported_with_messages”或“failed_with_messages”,请检查“processing_warnings”或“processing_errors”的内容。