Асинхронный клиент для «Сетевого города»
Project description
netschoolpy
Асинхронный клиент для «Сетевого города». Дневник, оценки, домашние задания, объявления — всё программно, без браузера.
Репозиторий: https://github.com/Vladcom4iiik/netschoolpy
Ключевые слова: Сетевой город, SGO, дневник, оценки, домашние задания, Госуслуги, ESIA, QR, API.
Документация (Docs)
Документация к проекту находится в папке docs/. Для локального просмотра:
pip install mkdocs mkdocs-material
mkdocs serve
Установка
pip install netschoolpy
# Для отображения QR-кода в терминале (опционально):
pip install netschoolpy[qr]
Способы входа
По логину/паролю SGO
import asyncio
from netschoolpy import NetSchool
async def main():
async with NetSchool("https://sgo.example.ru") as ns:
await ns.login("ИвановИ", "password", "Школа №1")
diary = await ns.diary()
asyncio.run(main())
Через Госуслуги (логин + пароль ЕСИА)
Программный вход через Госуслуги — без браузера. Поддерживает SMS и TOTP (приложение-аутентификатор) в качестве второго фактора.
async with NetSchool("https://sgo.example.ru") as ns:
await ns.login_via_gosuslugi(
esia_login="+79001234567", # телефон, email или СНИЛС
esia_password="your_password",
)
diary = await ns.diary()
При MFA код из SMS/TOTP будет запрошен через input().
Если esia_login / esia_password не указаны, они тоже запрашиваются через input().
Через Госуслуги (QR-код)
Вход без ввода логина и пароля — нужно отсканировать QR-код в мобильном приложении «Госуслуги».
async def show_qr(qr_data: str):
"""qr_data — deep-link gosuslugi://auth/signed_token=..."""
import qrcode
qrcode.make(qr_data).save("qr.png")
print("Отсканируйте QR в приложении Госуслуги!")
async with NetSchool("https://sgo.example.ru") as ns:
await ns.login_via_gosuslugi_qr(
qr_callback=show_qr, # вызовется после генерации QR
qr_timeout=120, # секунд ожидания сканирования
)
diary = await ns.diary()
qr_callback— async/sync функция, получает deep-linkgosuslugi://auth/signed_token=...для кодирования в QR. Если не указан — QR печатается в stdout (pip install qrcode).qr_timeout— таймаут ожидания сканирования (по-умолчанию 120 сек).
По токену / куки (продвинутое)
# По accessToken из localStorage SGO:
await ns.login_with_token("eyJ...")
# По session-store из localStorage:
await ns.login_with_session_store('{"accessToken":"eyJ..."}')
# По Cookie-строке из DevTools:
await ns.login_with_cookies("NSSESSIONID=abc123")
Удержание сессии (keep-alive)
После любого входа автоматически запускается фоновая задача, которая каждые 5 минут пингует сервер, не давая сессии истечь.
# Изменить интервал (в секундах):
ns.set_keepalive_interval(120) # каждые 2 минуты
# Отключить keep-alive:
ns.set_keepalive_interval(0)
При вызове logout() keep-alive останавливается автоматически.
API
async with NetSchool("https://sgo.example.ru") as ns:
await ns.login(...)
diary = await ns.diary() # дневник (текущая неделя)
diary = await ns.diary(start, end) # дневник за период
overdue = await ns.overdue() # просроченные задания
announcements = await ns.announcements() # объявления
attachments = await ns.attachments(...) # вложения к заданию
info = await ns.school_info() # информация о школе
await ns.download_attachment(id, buffer) # скачать вложение
await ns.download_profile_picture(id, buf) # аватар пользователя
Лицензия
© 2026 Vladcom4iiik. Все права защищены. Только личное, некоммерческое использование. Подробнее — LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netschoolpy-1.0.1.tar.gz.
File metadata
- Download URL: netschoolpy-1.0.1.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70e09288c3cd94461a3242f1d89622ed6adcfb5ced3ebe40aa722f349207b0e5
|
|
| MD5 |
8a913e2cbba9c1f508fea6cf89c3d02c
|
|
| BLAKE2b-256 |
7f85a525424075d8d4ec85ccdb21dea298802106185653887b1ae3391a274fe5
|
File details
Details for the file netschoolpy-1.0.1-py3-none-any.whl.
File metadata
- Download URL: netschoolpy-1.0.1-py3-none-any.whl
- Upload date:
- Size: 19.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31df3510a226843851f40b47ff75f168585904758d983a24d91929ba037a53d8
|
|
| MD5 |
324bcafd9a9fa4e352a52e5466ff1dff
|
|
| BLAKE2b-256 |
38867a8cc59e9b2f0a94cc3c50a544d9a36d61bab533cf0c4cb1c04f16bd4a56
|