1

可汗学院的 API Explorer 有一个练习部分,其中提到了按标签过滤,但应用了数学标签的 url什么也不返回。

通用练习对象不包含它们所在的主题。我的猜测是在 topictree/exercises json 对象的某个地方有一个 id 可以加入,但我不知道找到它的有效方法。

这是原始练习 json和原始topictree json(注意,第二个很大,包含许多数学以外的主题)。

4

2 回答 2

3

您可以使用以下内容进行所有练习:

http://www.khanacademy.org/api/v1/exercises
http://www.khanacademy.org/api/v1/topictree?kind=Exercise

我不确定这两者之间有什么区别-我不使用它们。我更喜欢按如下方式获取各个主题节点的数据:

http://www.khanacademy.org/api/v1/topic/%s
http://www.khanacademy.org/api/v1/topic/%s/exercises
http://www.khanacademy.org/api/v1/topic/%s/videos

其中 %s 是每个主题的“node_slug”属性。树的根只是“根”。第一个将为您提供主题详细信息和“child_data”数组中的子项列表。使用此数组中每个子主题的“id”属性在“internal_id”等于“id”的“children”数组中查找其详细信息。在那里,您将获得“node_slug”,用于该子主题的下一个 API 调用。当您处理任务时,“child_data”数组按照它们在网站上出现的顺序包含所有子项。

我缓存这些响应,这样我就不必每次都下载所有内容。

于 2015-10-04T14:57:03.807 回答
3

我不认为有一个很好的方法可以从主题树的子树(例如数学)返回练习。标签是一个不同的概念,数学中没有一个通用的标签。可能您最好的选择是仅使用练习(和主题)加载完整的主题树并从那里开始工作:

http://www.khanacademy.org/api/v1/topictree?kind=Exercise

如果您需要重复引用此结构,则提前下载和过滤它可能是有意义的,并且可能不时重新获取它以应对可汗学院内容的更改。但这取决于您的确切用例。

通常,任何内容项都可以通过content_id(有时称为id)或来引用slug,但不幸的是,命名和用法在任何地方都不一致。

于 2015-10-04T00:25:06.207 回答