我怎样才能从 khanacademy api 获得一个主题(例如数学)及其所有子主题的所有练习?

How can I get all the exercises for a topic (e.g., math) and all its subtopics from the khanacademy api?

可汗学院的 API Explorer exercises section that mentions filtering by tags, but the url with math tag applied returns 什么都没有。

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

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

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

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

如果您需要重复引用此结构,提前下载和过滤它可能是有意义的,并且可能不时重新获取它以考虑到可汗学院内容的变化。但这取决于您的具体用例。

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

您可以使用以下方法获取所有练习:

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" 属性在 "internal_id" 等于 "id" 的 "children" 数组中查找其详细信息。在那里,您将获得 "node_slug" 用于该子主题的下一个 API 调用。当您处理任务时,"child_data" 数组包含所有子项目,它们按照它们在网站上出现的顺序排列。

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