MosLib (python)

Библиотека python для работы с mos.ru


Содержание

  • Содержание

  • О библиотеке

  • Функции

  • Примеры


О библиотеке

  • Будет добавлено позже
  • Установка pip install git+https://hub.mos.ru/gataulin_vitaliy/moslib.git
  • Есть встроенный простой клиент для запуска python -m moslib или
from moslib import client
client.run()

Функции

  • moslib(token) инициализация класса, возращает класс *(класс будет будет называться app)
  • app.prof переменная с профилем:
Содержание
{
    "profile": {
        "last_name": "Фамилия",
        "first_name": "Имя",
        "middle_name": "Отчество",
        "birth_date": "yyy-mm-dd",
        "sex": "пол",
        "user_id": 1234567,
        "id": 12345,
        "phone": "номер",
        "email": "почта",
        "snils": "номер снилса",
        "type": "student" 
    },
    "children": [
        {
            "last_name": "Фамилия",
            "first_name": "Имя",
            "middle_name": "Отчество",
            "birth_date": "yyy-mm-dd",
            "sex": "пол",
            "user_id": 12345,
            "id": 12345,
            "phone": "номер",
            "email": "почта",
            "snils": "номер снилса",
            "type": null,
            "school": {
                "id": 2,
                "name": "название и описание",
                "short_name": "ГБОУ Школа № 0000",
                "county": "Северо-Западный административный округ",
                "principal": "ФИО директора",
                "phone": "номер школы",
                "global_school_id": 0000,
                "municipal_unit_name": null
            },
            "class_name": "12-Ы",
            "class_level_id": 12,
            "class_unit_id": 000000,
            "age": 0,
            "groups": [
                {
                    "id": 000000,
                    "name": "Название",
                    "subject_id": 000000,
                    "is_fake": false
                },
            ],
            "representatives": [
                {
                    "person_id": "номер",
                    "last_name": "Фамилия",
                    "first_name": "Имя",
                    "middle_name": "Отчество",
                    "type_id": 1,
                    "type": "Родитель",
                    "email": "почта",
                    "phone": "номер",
                    "snils": "снилс"
                },
            ],
            "sections": [
                {
                    "id": 000000,
                    "name": "Название",
                    "subject_id": null,
                    "is_fake": false
                },

            ],
            "sudir_account_exists": false,
            "sudir_login": null,
            "is_legal_representative": false,
            "parallel_curriculum_id": 827327,
            "contingent_guid": "номер",
            "enrollment_date": "yyyy-mm-dd",
            "service_type_id": 2,
            "profession_specialty_code": null,
            "profession_specialty_name": null
        }
    ],
    "hash": "hash len64"
}
  • app.school.get_homeworks(from_data=None,to_data=None) from_data и to_data даты между которыми получить задания. Если отсутствует, получает с текущего 7 дней.
Содержание
[
  {
    "type": "oo",
    "description": "Описание",
    "comments": [],
    "materials": [
      {
        "uuid": "ea1d1135-dcdb-3b32-a742-ea1d1135",
        "type": "       ",
        "selected_mode": "learn",
        "type_name": "Облако знаний",
        "id": null,
        "urls": [],
        "description": null,
        "content_type": null,
        "title": "Название",
        "action_id": 1,
        "action_name": "Пройти"
      },
      {
        "uuid": null,
        "type": "attachments",
        "selected_mode": null,
        "type_name": "Прочее",
        "id": 1234567890,
        "urls": [
          {
            "url": "ссылка на файл",
            "type": "file_link"
          }
        ],
        "description": null,
        "content_type": null,
        "title": "Заголовок ",
        "action_id": 2,
        "action_name": "Изучить"
      }
    ],
    "homework": "Задание",
    "homework_entry_student_id": 123456,
    "attachments": [],
    "subject_id": 123456,
    "group_id": 123456,
    "date": "yyyy-mm-dd",
    "date_assigned_on": "yyyy-mm-dd",
    "subject_name": "Предмет",
    "lesson_date_time": "yyyy-mm-ddThh:mm:ss",
    "is_done": true,
    "has_teacher_answer": false,
    "homework_id": 123456789,
    "homework_entry_id": 12345678,
    "homework_created_at": "yyyy-mm-dd hh:mm:ss",
    "homework_updated_at": "yyyy-mm-dd hh:mm:ss",
    "written_answer": null,
    "date_prepared_for": "yyyy-mm-ddThh:mm:ss"
  },
]
  • app.school.get_marks(from_data=None,to_data=None) from_data и to_data даты между которыми получить оценки. Если отсутствует, получает с текущего 7 дней.
Содержание
[
    {
        "id": 1234567890,
        "value": "5",
        "values": [
            {
                "name": "5-балльная",
                "nmax": 6.0,
                "grade": {
                    "origin": "5",
                    "five": 5.0,
                    "ten": 10.0,
                    "hundred": 100.0
                },
                "grade_system_id": 123456789,
                "grade_system_type": "five"
            }
        ],
        "comment": "Коментарий",
        "weight": 1,
        "point_date": null,
        "control_form_name": "Тема оценки",
        "comment_exists": true,
        "created_at": "yyyy-mm-yyThh:mm:ss",
        "updated_at": "yyyy-mm-yyThh:mm:ss",
        "criteria": null,
        "date": "yyyy-mm-dd",
        "subject_name": "Предмет",
        "subject_id": 123456789,
        "has_files": false,
        "is_point": false,
        "is_exam": false,
        "original_grade_system_type": "five"
    }
]

Примеры

получение заданий
from moslib import moslib
from datetime import datetime

app=moslib("ТОКЕН")

homeworks = app.school.get_homeworks()
for i in homeworks:
    print(f"Предмет: {i['subject_name']}")
    print(f"Задание: {i['description']}")
    print(f"Дата: {datetime.strptime(i['date_prepared_for'][:-9],"%Y-%m-%d").strftime("%d.%m.%Y")}")
    if len(i["materials"])!=0:
        for j in i["materials"]:
            for h in j["urls"]:
                if h["type"]=="file_link":
                    print(f"Ссылка: {h['url']}")
получение оценок за время
from moslib import moslib
from datetime import datetime

app=moslib("ТОКЕН")

marks = app.school.get_marks()
for i in marks:
    print(f"Предмет: {i['subject_name']}")
    print(f"Оценка: {i['value']} {f"({["weight"]})" if i["weight"]!=1 else ""}")
    if i["comment"]:
        print(f"Комментарий: {i['comment']}")
    print(f"Дата: {datetime.strptime(i['date'],"%Y-%m-%d").strftime("%d.%m.%Y")}")
получение всех оценок
from moslib import moslib

app = moslib("ТОКЕН")

subjects_marks = app.school.get_all_marks()
for subject in subjects_marks:
    print(f"📚 Предмет: {subject['subject_name']}")
    for period in subject["periods"]:
        print(f"📆 Период: {period["title"]}")

        if len(period["marks"]) == 0:
            print("Оценок нет")
        else:
            print(f"📝 Средняя оценка: {period['value']}")
            print("📝 Оценки:", end=" ")
            for i, mark in enumerate(period["marks"]):
                value = mark['value']
                weight = int(mark['weight'])
                
                # Если вес равен 1, выводим обычную оценку
                if weight == 1:
                    separator = "" if i == len(period["marks"]) - 1 else "; "
                    print(f"{value}{separator}", end="")
                else:
                    # Иначе выводим оценку с маленькой цифрой внизу справа
                    subscript_digits = ["₀", "₁", "₂", "₃", "₄", "₅", "₆", "₇", "₈", "₉"]
                    small_digit = "".join(subscript_digits[int(d)] for d in str(weight))
                    separator = "" if i == len(period["marks"]) - 1 else "; "
                    print(f"{value}{small_digit}{separator}", end="")
            print()
    print()