一个非常小的库,用于访问画布lms的api。
py_canvas_api的Python项目详细描述
我们的想法是为canvas api提供一个简单易懂的库。
画布api(https://canvas.instructure.com/doc/api/index.html)有数百个端点。
我觉得为他们每个人都写一个独特的方法是没有意义的。 相反,我创建了一个名为resterapi的类,它使用 动态生成端点的路径,并通过调用添加路径 带参数的元素画布类构建在resterapi之上。
其结果是一个相当小的库可以处理 画布API终结点。
像这样实例化canvas对象。
fromcanvas_apiimportCanvasc=Canvas('somedomain.instructure.com',CANVAS_ACCESS_TOKEN=os.getenv('ACCESS_TOKEN'))
构建路径
在实例化的canvas_api对象后面附加“methods”来构建路径。
您通常会看到一行,如get/api/v1/accounts/:account\u id/courses 在Canvas API文档中这将告诉您路径是什么以及内联 它需要的参数。您可以使用py_canvas_api库构建此路径 就像这样:c.accounts(8423).courses。不要担心/api/v1部分。
py_canvas_api库处理路径参数,例如:user by taking 它们作为方法参数例如,下面是您在 使用上述路径的ID为10的帐户。
# get a list of courses (paginated to 10) in the accountaccounts=c.accounts('self').courses.get().json()
常见请求
get
要发出get请求,只需以get()结束。这告诉图书馆 发出GET请求。这个库使用了很棒的Requests库,因此 在本例中,返回对象是简单的响应对象。你会经常 希望将响应作为json对象。通过使用 回应。
# get a list of courses (paginated to 10) in the accountaccounts_json=c.accounts('self').courses.get().json()
如果需要发送查询参数(问题后添加的键值对 标记),将这些作为关键字参数添加到get()调用中。假设你想要 一份你自己的课程清单,你是一名教师,并且报名是有效的。你通常需要 添加?enrollment_type=teacher&;enrollment_state=active指向要执行此操作的URL。使用py_canvas_api 不过,你可以这样做。
# get a list of courses (paginated to 10) in the accountaccounts_json=c.courses.get(enrollment_type='teacher',enrollment_state='active').json()
这里还有几个例子。
# list of usersusers=c.accounts('self').users.get().json()# assignments in course with canvas id 23423assignments=c.courses(23423).assignments.get().json()# assignments in course with sis id ENG101assignments=c.courses('sis_course_id:ENG101').assignments.get().json()# list communication channels for user with id 82channels=c.users(82).communication_channels.get().json()# list own communication channelschannels=c.users('self').communication_channels.get().json()# Get a list of all courses in the account. This will keep pulling results as# long as there are more pages. It uses generator functions to do this is a# smart way.accounts=c.accounts('self').course.get_paginated()
特殊情况
有一些特殊的案例 上课。例如,SIS Import API接受文件上传并需要 特殊处理
这里是如何做一个sis导入。
fromcanvas_apiimportSISImportersis_importer=SISImporter('somedomain.instructure.com',CANVAS_ACCESS_TOKEN=os.getenv('ACCESS_TOKEN'))sis_importer.do_sis_import(filepath)