pyaklass


Namepyaklass JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://codeberg.org/teapon/pyaklass
SummaryModule for communicating with a russian education website - YaKlass.
upload_time2023-05-16 18:51:46
maintainer
docs_urlNone
authorTeapon
requires_python>=3.10,<4.0
licenseMIT
keywords library module client python3 pyaklass russian russia education parse parsing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PYaKlass

Быстрый асинхронный модуль для работы с ЯКлассом.

**Функции:**

* Обход капчи
* Получение активных работ
* Получение всех работ (На данный момент только первой страницы)

## Примеры

### Получение активных работ
```python
from multiprocessing.managers import SyncManager

from pyaklass import Account

# Иначе: manager.start() и manager.shutdown()
with SyncManager() as manager:
    account = Account('login', 'password', manager)
    await account.login()

    testworks = await account.get_new_testworks()  # -> List[dict[str, Any]]
    print(testworks)
```

### Работа с несколькими аккаунтами
```python
from pyaklass import Account
from pyaklass.manager import AccountManager

# Здесь не требуется указывать SyncManager, так как AccountManager создает его сам.
# При различных менеджерах есть шанс блокировки вашего IP сервисом!
manager = AccountManager(
    Account('login1', 'password1'),
    Account('login2', 'password2'),
    Account('login3', 'password3'),
)
if not any(await manager.prepare()):
    print('Не получилось войти ни в один аккаунт.')

testworks_per_account = await manager.get_new_testworks()  # -> List[List[dict]]
print(testworks)
```

### Получение результатов прошедших работ

> **Примечание:**
> Пользователь может получить только свои результаты.

```python
from multiprocessing.managers import SyncManager

from pyaklass import Account

# Иначе: manager.start() и manager.shutdown()
with SyncManager() as manager:
    account = Account('login', 'password', manager)
    await account.login()

    results = await account.get_results(testwork_id=..., result_id=...)
    print(results)
```

## TODO

Будет сделано при желании и возможности.

- [ ] Брутфорс тестовых заданий
- [ ] Парсинг результатов, времени прохождения, введенных ответов
- [ ] Парсинг ФИО учителя, задавшего работу
- [ ] Использовать API пагинации вместо парсинга списка работ
  - [ ] `https://www.yaklass.ru/ajax/TestWork/GetStudentTestWorksAjax?type=FinishedTestWorks&page=1&from=%2FTestWork`


            

Raw data

            {
    "_id": null,
    "home_page": "https://codeberg.org/teapon/pyaklass",
    "name": "pyaklass",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.10,<4.0",
    "maintainer_email": "",
    "keywords": "library,module,client,python3,pyaklass,russian,russia,education,parse,parsing",
    "author": "Teapon",
    "author_email": "teapon@keemail.me",
    "download_url": "https://files.pythonhosted.org/packages/dd/cc/70d9ba64393996dfccc32b8fa3cc23802c9245011e8b614f6e663bf9ac1f/pyaklass-1.1.0.tar.gz",
    "platform": null,
    "description": "# PYaKlass\n\n\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u042f\u041a\u043b\u0430\u0441\u0441\u043e\u043c.\n\n**\u0424\u0443\u043d\u043a\u0446\u0438\u0438:**\n\n* \u041e\u0431\u0445\u043e\u0434 \u043a\u0430\u043f\u0447\u0438\n* \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\n* \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442 (\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b)\n\n## \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n### \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\n```python\nfrom multiprocessing.managers import SyncManager\n\nfrom pyaklass import Account\n\n# \u0418\u043d\u0430\u0447\u0435: manager.start() \u0438 manager.shutdown()\nwith SyncManager() as manager:\n    account = Account('login', 'password', manager)\n    await account.login()\n\n    testworks = await account.get_new_testworks()  # -> List[dict[str, Any]]\n    print(testworks)\n```\n\n### \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u043c\u0438\n```python\nfrom pyaklass import Account\nfrom pyaklass.manager import AccountManager\n\n# \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c SyncManager, \u0442\u0430\u043a \u043a\u0430\u043a AccountManager \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u0430\u043c.\n# \u041f\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u0445 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e IP \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c!\nmanager = AccountManager(\n    Account('login1', 'password1'),\n    Account('login2', 'password2'),\n    Account('login3', 'password3'),\n)\nif not any(await manager.prepare()):\n    print('\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u043e\u0439\u0442\u0438 \u043d\u0438 \u0432 \u043e\u0434\u0438\u043d \u0430\u043a\u043a\u0430\u0443\u043d\u0442.')\n\ntestworks_per_account = await manager.get_new_testworks()  # -> List[List[dict]]\nprint(testworks)\n```\n\n### \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\n\n> **\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:**\n> \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.\n\n```python\nfrom multiprocessing.managers import SyncManager\n\nfrom pyaklass import Account\n\n# \u0418\u043d\u0430\u0447\u0435: manager.start() \u0438 manager.shutdown()\nwith SyncManager() as manager:\n    account = Account('login', 'password', manager)\n    await account.login()\n\n    results = await account.get_results(testwork_id=..., result_id=...)\n    print(results)\n```\n\n## TODO\n\n\u0411\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.\n\n- [ ] \u0411\u0440\u0443\u0442\u0444\u043e\u0440\u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u043d\u0438\u0439\n- [ ] \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432\n- [ ] \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0424\u0418\u041e \u0443\u0447\u0438\u0442\u0435\u043b\u044f, \u0437\u0430\u0434\u0430\u0432\u0448\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443\n- [ ] \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c API \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\n  - [ ] `https://www.yaklass.ru/ajax/TestWork/GetStudentTestWorksAjax?type=FinishedTestWorks&page=1&from=%2FTestWork`\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Module for communicating with a russian education website - YaKlass.",
    "version": "1.1.0",
    "project_urls": {
        "Homepage": "https://codeberg.org/teapon/pyaklass",
        "Repository": "https://codeberg.org/teapon/pyaklass"
    },
    "split_keywords": [
        "library",
        "module",
        "client",
        "python3",
        "pyaklass",
        "russian",
        "russia",
        "education",
        "parse",
        "parsing"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "71b6737310eff2e89a1bc734ce702143bc4a21562deef46f90acb135b778a5cc",
                "md5": "08b212c6761c6b8e62e0c08643b0643e",
                "sha256": "a63170f4efc6640e5ca2f5f29a4e734b04f7e45b5c3fdf226897cdd5a0b1dc65"
            },
            "downloads": -1,
            "filename": "pyaklass-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "08b212c6761c6b8e62e0c08643b0643e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10,<4.0",
            "size": 15213,
            "upload_time": "2023-05-16T18:51:44",
            "upload_time_iso_8601": "2023-05-16T18:51:44.211661Z",
            "url": "https://files.pythonhosted.org/packages/71/b6/737310eff2e89a1bc734ce702143bc4a21562deef46f90acb135b778a5cc/pyaklass-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ddcc70d9ba64393996dfccc32b8fa3cc23802c9245011e8b614f6e663bf9ac1f",
                "md5": "e36d3f1e3ca1a634bf296c37ba25b7db",
                "sha256": "b392386864bd1557f48649b1734b63a28a9f8c4e63cfa4e321178ab9213edf57"
            },
            "downloads": -1,
            "filename": "pyaklass-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "e36d3f1e3ca1a634bf296c37ba25b7db",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10,<4.0",
            "size": 11351,
            "upload_time": "2023-05-16T18:51:46",
            "upload_time_iso_8601": "2023-05-16T18:51:46.778719Z",
            "url": "https://files.pythonhosted.org/packages/dd/cc/70d9ba64393996dfccc32b8fa3cc23802c9245011e8b614f6e663bf9ac1f/pyaklass-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-05-16 18:51:46",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": true,
    "codeberg_user": "teapon",
    "codeberg_project": "pyaklass",
    "lcname": "pyaklass"
}
        
Elapsed time: 0.06452s