1

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

我如何看到“我为谁当教练”( 的倒数/api/v1/user.coaches)?

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

4

1 回答 1

3

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

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

需要注意的一个重要警告是,在撰写本文时,您将无法代表已验证您的应用程序的用户请求学生,只能代表创建您当前使用的应用程序的用户。

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

此wiki 页面中记录了此行为(尽管有点令人困惑),以下是相关段落:

建议学校有一个注册 API 密钥的教师/教练帐户。这实现了登录用户与第三方开发人员相同的情况,然后他们可以根据可汗学院的“教练”关系访问自己的学生数据。例如,假设 Riverdale 高中的校长希望通过 API 导出多个学生的数据。校长将创建一个教师/教练帐户,可能称为“RiverdaleHighAPI”,并注册一个 API 密钥。然后校长会要求 Riverdale 高中的所有学生直接或通过几个班级代码添加“RiverdaleHighAPI”作为教练。当以“RiverdaleHighAPI”作为登录用户访问 API 时,校长将能够访问所有已添加“ 请注意,我们正在努力改进此功能;目前,这个“RiverdaleHighAPI”账户只能由学校的 API 客户端使用,而不是由任何实际的老师或教练使用。请注意,我们正在努力改进此功能;目前,这个“RiverdaleHighAPI”账户只能由学校的 API 客户端使用,而不是由任何实际的老师或教练使用。

最后,khan 实际上鼓励公开使用他们的内部 API。他们建议在登录 khan 时打开您的开发者控制台并查找返回所需数据的端点。(请参阅他们的身份验证文件上的此说明)。这显然是一种相当不标准的做法,我认为端点会在没有警告的情况下发生重大变化。此外,您将免费飞行文件。也就是说,这种方法对于您的目的可能是最可靠的选择。这是他们的 wiki 为后代引用的引述:

API 浏览器记录了我们的公共 API,它的 URL 以 /api/v1 开头,但不幸的是,它维护得不是很好,并且在一些方面缺乏。

但是,如果您喜欢冒险,欢迎您使用任何内部未记录的 API 端点。例如,如果您加载可汗学院的视频页面并使用浏览器的开发人员工具查看正在发送的 ajax 请求,您会看到它得到一个类似 /api/internal/videos/aubZU0iWtgI/transcript 的 URL,其中包含一个带有视频字幕的 JSON 响应。名称中的“内部”表示我们不提供文档,我们可能会在将来删除端点或更改格式,但如果您牢记这些警告,欢迎您使用任何内部端点。

于 2016-02-16T16:19:57.087 回答