如何访问所有学生的数据?

时间:2016-02-15 22:33:09

标签: khan-academy

我正在创建一个使用KA API对教练进行身份验证的应用,以便提供有关每位学生进度的统计数据和报告。

我如何看待"我是谁教练" (/api/v1/user.coaches的倒数)?

或以其他方式请求我所有学生的用户和进度数据?

1 个答案:

答案 0 :(得分:3)

您可以请求/api/v1/user/students获取当前经过身份验证的用户的列表。学生们。请注意,这是一个未记录的端点,不确定是否有意,但我怀疑只是一个疏忽,因为IIRC我已经看到他们在过去的github问题上引用它。

我将此端点添加到此PR中的khan npm模块:https://github.com/weo-edu/khan/pull/4

需要注意的一个重要注意事项是,在撰写本文时,您无法代表已对您的应用进行身份验证的用户请求学生,只有您创建应用的用户才能申请使用

换句话说:如果我创建了一个名为" hello"登录为" Jeffrey",我可以通过"你好"来验证Jeffrey的所有学生。应用程序。但是,如果我通过" hello"以Lisa身份登录。 app(通过oauth,例如passport-khan),我将拥有一个访问令牌,但Khan API将拒绝我的请求,因为Lisa没有创建"你好"应用

this wiki page中记录了这种行为(尽管有点令人困惑),这里是相关段落:

  

建议学校有一个教师/教练帐户注册API密钥。这使得登录用户与第三方开发者相同,然后第三方开发者可以访问他们自己的学生。依据可汗学院"教练"关系。例如,假设Riverdale High的校长希望通过API导出多个学生的数据。校长将创建一个教师/教练帐户,可能称为" RiverdaleHighAPI,"并注册API密钥。然后,校长会要求Riverdale High的所有学生添加" RiverdaleHighAPI"作为教练,直接或通过几个类代码。使用" RiverdaleHighAPI"访问API时作为登录用户,校长将能够访问已添加" RiverdaleHighAPI"的所有学生的数据。作为教练。该应用程序将无法访问任何其他教练'学生数据,即使其他教练通过应用程序登录。为了保护学生的隐私,我们不允许通过教练进行间接同意,并且我们要求每个学生明确授予访问其数据的权限。请注意,我们正在努力改进此功能;目前,这个" RiverdaleHighAPI"帐户只能由学校的API客户使用,而不能由任何实际的教师或教练使用。

最后, khan实际上鼓励公开使用其内部API 。他们建议在登录khan时查看开源控制台,并查找返回所需数据的端点。 (见this note on their authentication document)。 这显然是一种相当非标准的做法,我认为端点可能会在没有警告的情况下发生变化。此外,您还可以免费提供文档。也就是说,这种方法可能是您用途最强大的选择。以下是他们的wiki对后代的引用:

  

API资源管理器记录了我们的公共API,它的网址以/ api / v1开头,但不幸的是,它的维护得不是很好,而且缺少一些区域。

     

但是,如果您喜欢冒险,欢迎您使用任何内部未记录的API端点。例如,如果您加载Khan Academy视频页面并使用浏览器的开发人员工具查看正在发送的ajax请求,您会看到它获得的网址如/ api / internal / videos / aubZU0iWtgI / transcript,包含带视频字幕的JSON响应。那"内部"在名称中意味着我们不提供文档,我们可能会在将来删除端点或更改格式,但如果您记住这些警告,欢迎您使用任何内部端点。