Извлечение данных
Библиотека запросов не является частью стандартной библиотеки Python, поэтому вам нужно установить ее, чтобы начать работать с ней.
Для усправления пакетами Python в JupyterHub используется pip, поэтому, для установки запросов необходимо использовать следующую команду в консоли:
pip install requests
|
После того, как вы установили библиотеку, вам нужно будет ее импортировать. Также импортируем и библиотеку Pandas как pd.
import requests
import pandas as pd
|
Чтобы сделать запрос «GET», мы будем использовать requests.get() функцию.
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=...&wsfunction=...&moodlewsrestformat=json")
|
Список функций и их описание можно найти здесь. Также дополнительную информацию о функциях можно получить, перейдя в Moodle по вкладкам Администрирование -> Плагины -> Веб-службы -> Документация API и Администрирование -> Плагины -> Веб-службы -> Функции внешних служб.
Когда мы делаем запрос, ответ от API сопровождается кодом ответа, который сообщает нам, был ли наш запрос успешным. Коды ответов важны, потому что они немедленно сообщают нам, если что-то пошло не так. Для получения кода необходимо использовать следующую команду:
print(response.status_code)
|
Вот некоторые коды, которые относятся к запросам GET:
-
200: Все прошло хорошо и результат был возвращен (если есть).
-
301: Сервер перенаправляет вас на другую конечную точку. Это может произойти, когда компания меняет доменные имена или имя конечной точки изменяется.
-
400: Сервер считает, что вы сделали неверный запрос. Это может произойти, если вы отправите неверные данные.
-
401: Сервер думает, что вы не аутентифицированы. Для многих API требуются учетные данные для входа, поэтому код 401 случается, когда вы отправляете неверные учетные данные для доступа к API.
-
403: Ресурс, к которому вы пытаетесь получить доступ, запрещен: у вас нет прав для его просмотра.
-
404: Ресурс, к которому вы пытались получить доступ, не найден на сервере.
-
503: Сервер не готов обработать запрос.
Если все прошло хорошо, можно записать данные, полученные от сервера API в переменную:
data = pd.DataFrame(response.json())
|
Пример получения информации о курсах:
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=core_course_get_courses&moodlewsrestformat=json")
print(response.status_code)
core_course_get_courses = pd.DataFrame(response.json())
|
Пример получения содержания курса (необходимо указать идентификатор курса - параметр courseid):
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=core_course_get_contents&moodlewsrestformat=json&courseid=2")
print(response.status_code)
core_enrol_get_users_courses = pd.DataFrame(response.json())
|
Пример получения зачисленных пользователей по идентификатору курса:
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=core_enrol_get_enrolled_users&moodlewsrestformat=json&courseid=2")
print(response.status_code)
core_enrol_get_enrolled_users = pd.DataFrame(response.json())
|
Пример получения списка курсов, в которых зарегистрирован пользователь (необходимо указать идентификатор пользователя - параметр userid):
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=core_enrol_get_users_courses&moodlewsrestformat=json&userid=2")
print(response.status_code)
core_enrol_get_users_courses = pd.DataFrame(response.json())
|
Пример получения оценок за задание:
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=mod_assign_get_grades&moodlewsrestformat=json&assignmentids[0]=1")
print(response.status_code)
mod_assign_get_grades = pd.DataFrame(response.json()['assignments'])
|
Пример получения списка викторин в предоставленном списке курсов, если список не указан, будут возвращены все викторины, которые может просмотреть пользователь:
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=mod_quiz_get_quizzes_by_courses&moodlewsrestformat=json")
print(response.status_code)
mod_quiz_get_quizzes_by_courses = pd.DataFrame(response.json()['quizzes'])
|
Пример получения списка попыток для данной викторины и пользователя:
response = requests.get("https://your.site.com/moodle/webservice/rest/server.php?wstoken=t0k9n&wsfunction=mod_quiz_get_user_attempts&moodlewsrestformat=json&quizid=1")
print(response.status_code)
mod_quiz_get_user_attempts = pd.DataFrame(response.json()['attempts'])
|