mobnslib
Асинхронная библиотека для взаимодействия с мобильным API Сетевого Города (NetSchool) / Сетевого Дневника. Позволяет производить авторизацию через Госуслуги (ЕСИА), получать информацию об оценках, домашнем задании, расписании и почте.
📦 Установка
Библиотека опубликована на PyPI (конфигурация сборки описана в pyproject.toml в корне):
pip install mobnslib
Также можно установить напрямую из репозитория GitHub:
pip install git+https://github.com/chstudios-ru/mobnslib.git
Для работы библиотеки требуется httpx.
🚀 Быстрый старт
Пример полной авторизации через ЕСИА и получения дневника на текущую неделю.
import asyncio
from mobnslib import nslib
async def main():
# 1. Инициализация клиента. Укажите URL вашей школы/региона.
client = nslib(url="https://school.region.ru/")
# 2. Авторизация через ЕСИА (Госуслуги)
print("Авторизация...")
login_data = await client.esia_login("ВАШ_ТЕЛЕФОН_ИЛИ_СНИЛС", "ВАШ_ПАРОЛЬ")
# Если включена двухфакторная аутентификация (MFA)
if login_data.get('status') == 'ENTER_MFA':
mfa_types = {
"TTP": "из приложения с кодами",
"MAX": "из макса",
"SMS": "из смс"
}
desc = login_data.get('desc', '')
source = mfa_types.get(desc, desc)
code = input(f"Введите код {source}: ")
login_data = await client.esia_mfa(code, login_data)
# Завершение входа и получение токенов
tokens = await client.esia_login_end(login_data)
access_token = tokens['access_token']
# 3. Получение базовой информации об ученике
info = await client.get_info(access_token)
student_id = info[0]['id']
print(f"Привет, {info[0]['firstName']}! Ваш ID: {student_id}")
# 4. Получение дневника (расписания)
diary = await client.get_diary(access_token, student_id)
print(f"Получено дней в дневнике: {len(diary)}")
if __name__ == "__main__":
asyncio.run(main())
📚 Документация по методам
Ниже представлен подробный список всех доступных методов класса nslib.
Библиотека разбита на логические модули (API), но все методы вызываются напрямую от экземпляра client.
Все основные методы требуют передачи access_token (строки). Многие методы требуют student_id.
🔑 Авторизация (ЕСИА) и токены
-
esia_login(login, password)Начинает процесс авторизации. Возвращает словарьlogin_data. Если требуется MFA (2FA), ключ'status'будет равен'ENTER_MFA', а ключ'desc'указывает способ получения кода:"TTP"— из приложения с кодами (одноразовые коды TOTP, например Google Authenticator или Яндекс Ключ);"MAX"— из приложения / мессенджера Max;"SMS"— из SMS-сообщения.
Если MFA не требуется,
'status'равен'DONE'. -
esia_mfa(mfa_code, login_data)Прохождение двухфакторной аутентификации.login_data— результат методаesia_login. Возвращает обновленный словарьlogin_data. -
esia_login_end(login_or_mfa_data)Завершает авторизацию. Возвращает словарь с токенами:access_token,refresh_token,expires_in,created_at. -
token_refresh(refresh_token)Обновляет истекшийaccess_token. Возвращает новыеaccess_tokenиrefresh_token.
👤 Информация об ученике и учебе (User API)
-
get_info(access_token)Возвращает информацию о текущем пользователе (список профилей). Пример ответа:[{ "id": 123456, "firstName": "Иван", "organizations": [...] }]. -
get_school_year(access_token, student_id)Возвращает информацию об учебных годах. Ответ:{"nowYear": 987654, "allYears": [...]}.nowYear(ID текущего года) нужен для других методов. -
get_subjects(access_token, student_id, school_year_id, diary=None)Возвращает список предметов, изучаемых в заданном учебном году. -
get_totals(access_token, student_id, school_year_id)Возвращает массив со всеми итоговыми (четвертными, годовыми) оценками ученика. -
get_terms(access_token, student_id, school_year_id)Возвращает список учебных периодов (четвертей/триместров) с датами их начала и конца. -
get_ver()Возвращает актуальную версию мобильного API (например,"1.3.9"). -
get_server_list()(Статический метод) Возвращает список всех доступных серверов (регионов) Сетевого Города, поддерживающих мобильное приложение. Вызов:await nslib.get_server_list().
📓 Дневник, Задания и События (Diary API)
-
get_diary(access_token, student_id, start_date=None, end_date=None, day=None, pattern='%Y-%m-%d')Возвращает расписание (список дней и уроков). Если передать параметрday(один день), метод вернет расписание на всю неделю, содержащую этот день. Если передатьstart_dateиend_date, метод вернет расписание за указанный промежуток (можно запросить неделю, месяц и т.д.). Даты можно передавать как в виде строк, так и в виде объектовdatetimeилиdate. Форматpatternприменяется для преобразования датday,start_dateиend_dateв нужный строковый формат. По умолчанию возвращает текущую неделю. -
get_assignments(access_token, student_id, classmeeting_ids=None, diary=None, limit=20, delay=0.1)Возвращает подробные данные домашних заданий по урокам. Вы можете передать готовый список уроковdiary(результатget_diary), и метод сам извлечет задания для этих дней.- Зачем параметры
limitиdelay: именно таким образом запрашивает данные официальное мобильное приложение NetSchool — порциями поlimitэлементов с небольшими паузамиdelayмежду запросами. Разработчики официального клиента неспроста используют эту схему: следование ей обеспечивает безопасную загрузку данных, делает поведение библиотеки неотличимым от штатного мобильного клиента, предотвращает перегрузку сервера Сетевого Города и спасает от ошибокHTTP 429 Too Many Requests.
- Зачем параметры
-
get_attachment_info(access_token, assignment_ids=None, diary=None, limit=20, delay=0.1)Возвращает метаданные вложений к домашним заданиям. Также может принимать готовыйdiary.- Зачем параметры
limitиdelay: аналогично методу заданий, повторяет проверенный паттерн официального мобильного приложения для порционной загрузки информации о файлах без риска нарваться на блокировки или перегрузить сервер.
- Зачем параметры
-
load_attachment(access_token, attachment_id)Скачивает вложение по его ID. -
upload_attachment(access_token, student_id, file_path)Загружает файл на сервер Сетевого Города (для прикрепления к ответу на ДЗ или к письму). -
get_announcements(access_token, student_id)Возвращает список школьных объявлений (на доске объявлений). -
Методы событий (оценки, новое ДЗ и т.д.): Позволяют получить список событий и итогов за последние 'period_days' (дней):
get_homework_info_events(access_token, student_id, period_days, ...)— события новых домашних заданий и итогов за последние 'period_days' (дней).get_result_info_events(...)— события новых выставленных оценок и итогов за последние 'period_days' (дней).get_term_total_info_events(...)— события итоговых оценок за учебный период и итогов за последние 'period_days' (дней).get_year_total_info_events(...)— события итоговых оценок за учебный год и итогов за последние 'period_days' (дней).get_all_events(...)— получить все типы событий и итогов за последние 'period_days' (дней) разом.
✉️ Внутренняя почта (Mail API)
-
get_mail_unread_count(access_token, student_id)Возвращает количество непрочитанных писем. -
Чтение ящиков (постраничная загрузка писем): Сервер возвращает письма не сразу всеми сотнями, а порциями (страницами). По умолчанию возвращаются первые 20 писем (
page=1,page_size=20), отсортированные от самых новых к старым.Методы возвращают словарь со структурой:
{ "page": 1, "pageSize": 20, "totalPages": 5, "totalItems": 94, "items": [...] }
totalItems— общее количество писем в ящике;totalPages— общее количество страниц;page— текущий номер страницы;pageSize— размер страницы (количество писем, запрашиваемых за раз);items— список самих объектов писем на текущей странице.
Чтобы получить следующие письма, передавайте номер следующей страницы:
page=2,page=3и т.д. Параметрinvert_sort=Trueменяет порядок сортировки (по умолчаниюFalse— сначала новые, сTrue— сначала старые).Доступные методы для разных ящиков:
get_inbox_mails(access_token, student_id, page_size=20, page=1, invert_sort=False)— входящие.get_sent_mails(...)— отправленные.get_draft_mails(...)— черновики.get_deleted_mails(...)— корзина.
-
read_mail(access_token, student_id, message_id, page_size=150)Не только помечает письмо как прочитанное на сервере, но и возвращает его полный объект со всем содержимым: телом письма (текстом), темой, автором, подробными списками получателей, прикрепленными вложениями и метаданными. -
send_mail(access_token, student_id, subject, text, to_ids, copy=None, hidden_copy=None, attachment_ids=None, message_id=None, notify=False, draft=False)Отправка нового письма или сохранение черновика:subjectиtext— тема и текст сообщения;to_ids— список ID основных получателей (поле «Кому»);copy— список ID пользователей для открытой копии (поле «Копия», видны всем адресатам);hidden_copy— список ID для скрытой копии (поле «Скрытая копия», не видны другим получателям);attachment_ids— список ID прикрепленных файлов (предварительно загруженных черезupload_attachment);message_id— ID сообщения при редактировании существующего черновика;notify— запрос отчета о прочтении (еслиTrue, отправителю придет уведомление, когда получатель откроет письмо);draft— сохранить в «Черновики» без отправки (еслиTrue).
-
delete_mail(access_token, student_id, message_id)Перемещает письмо в корзину. -
Шаблоны ответов (возвращают черновик ответа):
get_sample_reply_mail(access_token, student_id, message_id)— ответить.get_sample_reply_all_mail(...)— ответить всем.get_sample_forward_mail(...)— переслать.
👥 Адресная книга и ЧС (Address Book)
-
get_recipients(access_token, student_id, org_id)Возвращает адресную книгу школы (учителя, администраторы). Требуетorg_id(можно получить изget_info). -
get_recipient_by_id(access_token, user_id)Возвращает профиль пользователя по его ID. -
block_user(access_token, student_id, user_id)Добавляет пользователя в черный список почты. -
unblock_user(access_token, student_id, user_id)Удаляет пользователя из черного списка. -
get_blocked_users(access_token, student_id)Возвращает список пользователей, добавленных в черный список.
Release files for mobnslib 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mobnslib-1.2.1.tar.gz | 26.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mobnslib-1.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.9 kB
Release files / mobnslib-1.2.1.tar.gz
| Download URL | mobnslib-1.2.1.tar.gz |
|---|---|
| Size | 26.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a1e226d411a196fad6c6da48e030f9618f99a3c92c7baf41ef048920949cc846
|
|
BLAKE2b-256 checksum How to use checksums |
ef25e1cc68e260ba6d0b290fb7a2a86aa2dcbf89d5c4659da52dd652f61d5536
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Release files / mobnslib-1.2.1-py3-none-any.whl
| Download URL | mobnslib-1.2.1-py3-none-any.whl |
|---|---|
| Size | 21.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b640eb8575617b480cd5d820e2608b0eadfde5449ade04ee80ed2acf0c13a6a1
|
|
BLAKE2b-256 checksum How to use checksums |
9ccf59fe1b05c49c66821bb7d52880a87ca5de7d49ab24fa294dc2828fa16028
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|