如何从khanacademy api获取主题(例如数学)及其所有子主题的所有练习?

时间:2015-10-02 22:52:20

标签: khan-academy

可汗学院的API资源管理器有exercises section提及按标签过滤,但url with math tag applied不返回任何内容。

通用练习对象不包含他们所处的主题。我的猜测是,在topictree / exercise json对象的某个地方加入了id,但我没有&#39知道找到它的有效方法。

以下是原始exercises json和原始topictree json(注意,第二个是巨大的,包含除数学以外的许多主题)。

2 个答案:

答案 0 :(得分:3)

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

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

如果您需要反复引用此结构,可能需要提前下载并过滤它,并且可能会不时重新获取它以考虑Khan Academy内容的更改。但这取决于您的确切用例。

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

答案 1 :(得分: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"每个主题的属性。树的根只是" root"。第一个将为您提供主题详细信息以及" child_data"中的子项列表。阵列。使用" id"此数组中每个子主题的属性,以在" children"中查找其详细信息。数组有" internal_id"等于" id"。你得到了" node_slug"到该子主题的下一个API调用。 " child_data"当您使用任务时,数组包含它们在网站上显示的顺序中的所有子项。

我会缓存这些回复,以便我不必每次都下载所有内容。