Python библиотека для получения информации из школьного дневника bars.
- Установите библиотеку:
pip install bars-api python-dotenv
- Создайте такую структуру:
your_project
├── .env
└── main.py
- Скопируйте и запустите этот код:
.env
HOST="YOUR_HOST_HERE"
COOKIE="YOUR_COOKIE_HERE"
main.py
import asyncio
from os import getenv
from barsapi import BarsAPI
from dotenv import load_dotenv
# Загружаем данные из .env
load_dotenv()
# Host может быть получен здесь http://aggregator-obr.bars-open.ru/my_diary
HOST = getenv("HOST")
COOKIE = getenv("COOKIE")
async def main() -> None:
# Инициализируем объект API для взаимодействия
async with BarsAPI(HOST, COOKIE) as api:
print(await api.get_birthdays())
print(await api.get_class_hours())
print(await api.get_class_year_info())
print(await api.get_events())
print(await api.get_person_data())
print(await api.get_school_info())
print(await api.get_summary_marks())
print(await api.get_total_marks())
if __name__ == "__main__":
asyncio.run(main())
Warning
Не забудьте заменить YOUR_HOST_HERE и YOUR_COOKIE_HERE на ваши данные.
YOUR_HOST_HERE можно получить тут, а для получения YOUR_COOKIE_HERE воспользуйтесь этим гайдом.
Доступные функции:
api.get_birthdays()
api.get_class_hours()
api.get_class_year_info()
api.get_events()
api.get_person_data()
api.get_school_info()
api.get_summary_marks()
api.get_total_marks()
Данные о классе ученика:
{
"study_level": 10, // Класс в котором учится пользователь
"letter": "А", // Буква класса в котором учится пользователь
"form_master": "Иванов Иван Иванович", // ФИО классного руководителя
"form_master_photo": "noavatar_f_big.png", // Аватарка классного руководителя
"form_master_male": true, // Пол классного руководителя (true - мужской, false - женский)
"specialization": "нет", // ? Специализация
"photo": "noavatar_big.gif", // Аватарка пользователя
"pupils": [ // Ученики (однокласники пользователя)
{
"fullname": "Иванов Иван Иванович", // ФИО однокласника
"photo": "", // Аватарка однокласника
"male": true // Пол однокласника (true - мужской, false - женский)
},
...
]
}
Данные о пользователе:
{
"indicators": [ // Средний балл по предметам
{
"name": "Средний балл (Алгебра)", // Название предмета
"value": "3.10", // Оценка (дробное число)
"css": "ico orange" // Цвет, которым отображается оценка (не совсем понятно зачем, проще на фронте цвет простым "if" расчитывать)
},
...
],
"children_persons": [], // Дети пользователя (пустой список т. к. авторизация произведена через аккаунт ребёнка)
"selected_pupil_id": 777777, // Внутренний id выбранного ребёнка
"selected_pupil_name": "Иванов Иван", // ФИО выбранного ребёнка
"selected_pupil_ava_url": "noavatar_big.png", // Аватарка выбранного ребёнка
"selected_pupil_school": "МБОУ \"СОШ № 1\"", // Школа выбранного ребёнка
"selected_pupil_is_male": true, // Пол выбранного ребёнка
"selected_pupil_classyear": "10 А", // Класс выбранного ребёнка
"user_ava_url": "noavatar_big.png", // Аватарка пользователя
"user_has_ava": false, // Аватарка выбранного ребёнка
"user_fullname": "Иванов Иван Иванович", //
"user_desc": "Ученик 10 А класса", // Описание пользователя
"user_is_male": true, // Пол пользователя (true - мужской, false - женский)
"phone": "", // номер телефона пользователя
"phone_sms": "", // ? номер телефона для смс
"auth_user_profile_id": 77777 // Внутренний id пользователя
}
{
"name": "МБОУ СОШ № 9\" г. Город Регион", // Название школы
"address": "ул. Пушкина, д. ...", // Адрес школы
"phone": "+7 (777) 777-77-77", // Номер телефона школы
"site_url": "https://github.com/iamlostshe", // Ссылка на сайт школы
"count_employees": 91, // ??
"count_pupils": 2067, // Общее кол-во учеников в школе
"photo": "/jrnwfkjq.jpg", // Ссылка на фото школы
"email": "school1@gorod.region.ru", // Электронная почта школы
"ustav": "", // ? Устав
"employees": [
{
"group": "Педагогический состав", // ? Группа (ещё есть "Обслуживающий персонал")
"fullname": "Иванов Иван Иванович", // ФИО
"employer_jobs": [ // Ставки
"Классный руководитель",
"Учитель географии"
],
"category": "", // ? Категория
"photo": "", // Ссылка на фото
"male": true // Пол
},
...
]
}
Сводка по оценкам:
{
"subperiod": { // Текущий суб-период (зачем, непонятно...)
"code": "Полугодие_2",
"name": "2 Полугодие"
},
"discipline_marks": [
{
"discipline": "История", // Название предмета
"marks": [
{
"date": "2025-01-13", // Дата за которую поставлена оценка
"mark": "5", // Оценка (целое число)
"description": "Работа на уроке: нет темы" // Описание (никогда не видел другого)
},
...
],
"average_mark": "5.0" // Средний балл по этому предмету
},
...
],
"dates": [
"2025-03-21" // ? Даты (зачем они тут, непонятно...)
...
]
}