Coder Social home page Coder Social logo

nm17 / netschoolapi Goto Github PK

View Code? Open in Web Editor NEW
85.0 8.0 16.0 193 KB

Полностью асинхронный API клиент для "Сетевой Город. Образование" написанный на Python

Home Page: https://netschoolapi.readthedocs.io/

License: MIT License

Python 100.00%
python netschool sgo api-client

netschoolapi's Introduction

netschoolapi

Tag Downloads

NetSchoolAPI — это асинхронный клиент для «Сетевого города», который может получить дневник с домашними заданиями и оценками, объявления и просроченные задания.

Библиотека не имеет отношения к «ИрТеху»

Документация

А ещё у нас есть примеры в /examples.

Жалобы и предложения

Обсуждение библиотеки ведётся в чате проекта в телеграме. Если вы хотите сообщить о баге или предложить фичу — создайте ишью.

Лицензия

Код библиотеки распространяется под лицензией MIT. Это значит, что вы можете копировать, распространять, изменять, публиковать и продавать код netschoolapi без разрешения её авторов, но при условии добавления уведомления об авторских правах во все копии или существенные части Программного обеспечения. Проще говоря, развлекайтесь!

netschoolapi's People

Contributors

0ladyshek avatar anon1efergwerfwer avatar artembay avatar homus32 avatar igorlanov avatar lentryd avatar megahomyak avatar nm17 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netschoolapi's Issues

Загрузка файлов

Описание проблемы

Не хватает информации про загрузку файлов прикрепленных, также немного устаревшая документация

AttributeError: 'NoneType' object has no attribute 'group'

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
    start(fakepyfile,mainpyfile)
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
    exec(open(mainpyfile).read(),  __main__.__dict__)
  File "<string>", line 11, in <module>
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/site-packages/trio/_core/_run.py", line 1804, in run
    raise runner.main_task_outcome.error
  File "<string>", line 8, in main
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/site-packages/netschoolapi/client.py", line 96, in login
    int(re.search(r'userId = "(\d+)"', resp.text, re.U).group(1)) - 2
AttributeError: 'NoneType' object has no attribute 'group'

[Program finished]

Получение отчета

Привет, заинтересовал твой проект. Короче говоря, нужно каким то образом вытаскивать pdfку с отчетами, возможно такое реализовать?

marshmallow.exceptions.ValidationError

Описание проблемы

код:

data['lesson'] = message.text

        await ns.login(
            NS_LOGIN,
            NS_PASSWORD,
            NS_SCHOOL
        )

        diary = await ns.diary(
            start=data['date']
        )
        print(diary)
        await ns.logout()
        await message.reply('test')

data['date'] это пропарсенная через dateparser строка, преобразованная в datetime.datetime

Каков ожидаемый результат?

  • получение дневника

Каков реальный результат?

Traceback (most recent call last):
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 417, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 238, in process_updates
return await asyncio.gather(*tasks)
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 259, in process_update
return await self.message_handlers.notify(update.message)
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "/home/ubuntu/snvmk-bot-py/main.py", line 68, in process_lesson
diary = await ns.diary(
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/netschoolapi/netschoolapi.py", line 172, in diary
return data.diary(diary_schema.load(response.json()))
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/marshmallow/schema.py", line 719, in load
return self._do_load(
File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/marshmallow/schema.py", line 901, in _do_load
raise exc
marshmallow.exceptions.ValidationError: {'weekDays': {0: {'lessons': {0: {'room': ['Field may not be null.']}, 1: {'room': ['Field may not be null.']}, 2: {'room': ['Field may not be null.']}, 3: {'room': ['Field may not be null.']}, 4: {'room': ['Field may not be null.']}, 5: {'room': ['Field may not be null.']}}}, 1: {'lessons': {0: {'room': ['Field may not be null.']}, 1: {'room': ['Field may not be null.']}, 2: {'room': ['Field may not be null.']}, 3: {'room': ['Field may not be null.']}, 4: {'room': ['Field may not be null.']}, 5: {'room': ['Field may not be null.']}}}, 2: {'lessons': {0: {'room': ['Field may not be null.']}, 1: {'room': ['Field may not be null.']}, 2: {'room': ['Field may not be null.']}, 3: {'room': ['Field may not be null.']}, 4: {'room': ['Field may not be null.']}, 5: {'room': ['Field may not be null.']}}}, 3: {'lessons': {0: {'room': ['Field may not be null.']}, 1: {'room': ['Field may not be null.']}, 2: {'room': ['Field may not be null.']}, 3: {'room': ['Field may not be null.']}, 4: {'room': ['Field may not be null.']}}}}}

Дополнительные детали / скриншот

Используеться в aiogram телеграм боте

RuntimeError: Cannot send a request, as the client has been closed.

Описание проблемы

кусок кода:

@dp.message_handler(state=Form.lesson)
async def process_lesson(message: types.Message, state: FSMContext):
    await ns.login(
                NS_LOGIN,
                NS_PASSWORD,
                NS_SCHOOL
    )
    async with state.proxy() as data:
        data['lesson'] = message.text

        diary = await ns.diary(
            start=data['date'],
            end=data['date']
        )
        lesson = None
        lessons = diary.schedule[0].lessons
        await ns.logout()
        for k, v in lesson_aliases.items():
            if data['lesson'] in v:
                for i in lessons:
                    if i.subject == k:
                        lesson = i
                        break

        await message.reply(lesson)

    await state.finish()

ошибка:

Traceback (most recent call last):
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 417, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 238, in process_updates
    return await asyncio.gather(*tasks)
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/dispatcher.py", line 259, in process_update
    return await self.message_handlers.notify(update.message)
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/aiogram/dispatcher/handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "/home/ubuntu/snvmk-bot-py/main.py", line 72, in process_lesson
    await ns.login(
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/netschoolapi/netschoolapi.py", line 41, in login
    response_with_cookies = await self._client.get('logindata')
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/httpx/_client.py", line 1740, in get
    return await self.request(
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/httpx/_client.py", line 1494, in request
    response = await self.send(
  File "/home/ubuntu/snvmk-bot-py/.venv/lib/python3.9/site-packages/httpx/_client.py", line 1572, in send
    raise RuntimeError("Cannot send a request, as the client has been closed.")
RuntimeError: Cannot send a request, as the client has been closed.

Шаги, чтобы воспроизвести проблему

  1. запустить аиограм-бота
  2. дать команду
  3. дать команду во второй раз
  4. получить ошибку

Каков ожидаемый результат?

  • повторное удачное выполнение команды

Каков реальный результат?

  • ошибка

Дополнительные детали / скриншот

  • используется в aiogram-боте

examples directory?

не нашел директорию с примерами, она появится или ее не будет вовсе?

Переписывание API на современном C# и .NET 6.0

banner
Идея, сделать API для электронного дневника неплохая, но я давно не кодил на питоне, так что было бы неплохо переписать API с использованием асинхронного C#. Если тут есть люди, готовые этим заняться, отпишитесь сюда)
Если что, могу помогать с разработкой (или вы, то есть репозиторий создам я)

Неактуальная версия в менеджере пакетов

Описание проблемы

В pip висит неактуальная версия 5.0.1 (в репозитории 5.0.2)

Шаги, чтобы воспроизвести проблему

  1. Залить актуальную версию библиотеки в PyPI

Каков ожидаемый результат?

  • Версия 5.0.2, которую можно нормально установить

Добавить /loginform API

В электронике теперь prepareloginform нельзя использовать напрямую, ибо там под каждым значением ещё свои значения. Теперь после каждого элемента надо кидать запрос:

GET https://edu.admoblkaluga.ru:444/webapi/loginform?cid=2&sid=122&pid=36&cn=2025&LASTNAME=cn&cacheVer=637352585613114467

Response:

{"items":[{"id":1,"name":"Дошкольное образование"},{"id":2,"name":"Общеобразовательная"}],"lastElem":"cn"}  # Это funcs если что
  • LASTNAME=... - Последний элемент который указал пользователь. (Не тот который нужно получить)

Какие-то проблемы с запросами.

import asyncio

from netschoolapi import NetSchoolAPI


async def main():
    async with NetSchoolAPI(
            'https://sgo.edu-74.ru/',  # Сайт «Сетевого города»
            '',  # Логин
            '',  # Пароль от дневника
            # Адрес вашей школы. Вы видите его когда входите на сайт СГО
            # Указывайте всё как на сайте, буква к букве, это важно!
            (
                'Челябинская обл',  # Область
                'Городской округ Златоуст',  # Округ или район
                'Златоуст, г.', # Населённый пункт.

                'Общеобразовательная',  # Это тоже
                'МАОУ СОШ № 45',  # Образовательная организация
            ),
    ) as api:
        print(await api.get_diary())
        # Твой код живёт здесь


event_loop = asyncio.get_event_loop()
event_loop.run_until_complete(main())

После выполнения получаю это:

C:\Users\Main\Desktop\myWS\sgo>python main.py
Traceback (most recent call last):
  File "main.py", line 27, in <module>
    event_loop.run_until_complete(main())
  File "C:\Program Files\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
    return future.result()
  File "main.py", line 7, in main
    async with NetSchoolAPI(
  File "C:\Users\Main\AppData\Roaming\Python\Python38\site-packages\netschoolapi\client.py", line 143, in __aenter__
    await self._login()
  File "C:\Users\Main\AppData\Roaming\Python\Python38\site-packages\netschoolapi\client.py", line 99, in _login
    login_data = (await client.post("webapi/auth/getdata")).json()
  File "C:\Users\Main\AppData\Roaming\Python\Python38\site-packages\httpx\_models.py", line 1113, in json
    return jsonlib.loads(self.content.decode(encoding), **kwargs)
  File "C:\Program Files\Python38\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\Python38\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\Python38\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

версия python:

python --version
Python 3.8.6

Обновите проект под typing-extensions==4.7.0

Описание проблемы

Хотел взять идею вашего проекта для реализации телеграм бота, но вышла новая версия aiogram 3.1 версии, а там нужен typing-extensions=>4.7 версии. Заранее спасибо!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.