2017-01-20 2 views
0

Используя API-интерфейс академии khan, я хотел бы получить список всех математических тем и подтемов для определенного класса (и соответствующих идентификаторов видео) , аналогично тому, что вы можете видеть здесь - https://www.khanacademy.org/math/cc-seventh-grade-mathКак получить все темы академии хана только для одного предмета и/или оценки только

В идеале, я хотел бы передать оценку (7) и тему (математику) в качестве параметра в вызове API для этого? Это возможно?

Глядя на полное дерево темы, «domain-slug» оказывается наиболее близким к «теме» в том смысле, что я использую это слово, но он, кажется, не устанавливается последовательно. Я также не вижу специального поля для оценки.

Как бы вы это сделали? Любые советы будут оценены наиболее высоко. Благодарю.

ответ

0

Я не использую вызов API дерева тем - он возвращает около 50 МБ данных. Я скорее перемещаю узлы дерева индивидуально, используя вызов API «http://www.khanacademy.org/api/v1/topic/%s», где% s - это поле «node_slug», начиная с «node_slug» от «root».

Оттуда вы используете записи «children» и «child_data», чтобы пересечь узлы. «children» имеет детали и «child_data» в основном просто порядок, в котором они появляются.

Для каждого узла есть два важных поля для просмотра: «kind» и «render_type».

"вид" может иметь значение:

  • "Тема"
  • "Видео"
  • "Упражнение"
  • "Статья"
  • "блокнот"
  • «Separator "

" render _Type»может иметь значения:

  • "Корень"
  • "Доменные"
  • "Тема"
  • "Тема"
  • "Учебное пособие"
  • "UncuratedTutorial"

Итак, из «root» вы перебираете дочерние узлы, ища узлы с «render_type» = «Domain». Это даст вам такие вещи, как «математика», «наука» и т. Д. Теперь вы можете использовать узел «math» для повторения объектов под ним, ища «render_type» = «Subject». Среди них вы найдете 7-го класса, и т.д.

Примечание: Оба домена и предметные узлы имеют «вид» = «тема», так что вы должны убедиться, что вы проверить их, а затем использовать «render_type», чтобы найти домен или предметное различие.

Что я также делаю, это кэшировать ответы JSON, чтобы приложение не перезагружало их с веб-сайта. У меня есть возможность обновить их с веб-сайта, когда это необходимо.

Затем вы можете использовать предметный узел для дальнейших перебирать свои ребенок для видео, упражнение, статей и т.д.

+0

Большого спасибо @Jannie! Из-за этого я наконец-то ухожу. Возможно, это ограничение платформы, которую я использую для создания моего приложения, но я не могу фильтровать на верхнем уровне узла. Поэтому, если я делаю http://www.khanacademy.org/api/v1/topic/s%, я не могу отфильтровать результаты render_type. Я могу только фильтровать записи «children», и render_type, похоже, не существует для дочерних или дочерних записей - только для текущей темы верхнего уровня. Я, вероятно, смотрю на это неправильно. – willcom

+0

Хорошо, так что у меня это работает, вроде. Чтобы попробовать, я создал 4 раскрывающихся списка (DDL). DDL1 отображает все node_slugs для темы «math». DDL2 отображает все node_slugs для темы, выбранной в DDL1, DDL3 показывает node_slugs для той, которая выбрана в DDL2. Все это использует вызов API http://www.khanacademy.org/api/v1/topic/s%. Наконец, DDL4 использует API-интерфейс get video для отображения списка идентификаторов видео. Моя проблема теперь в том, могу ли я полагаться на темы, имеющие 3 уровня глубины? Я не использую render_type в любом из них из-за проблемы, упомянутой выше. Позволит ли я пропустить шаг или два, чтобы добраться до видео? – willcom

+0

Я бы не стал полагаться на темы, имеющие 3 уровня глубины. Вместо использования выпадающих списков я использую древовидное представление, которое я заполняю при открытии подэлементов темы. Таким образом, он по-прежнему будет работать, если у них есть видеоролики, а также подтемы по теме (которых у них в настоящее время нет). –

Смежные вопросы