dnevnik.ru unofficial API asyncio parser
Project description
Неофициальный асинхронный API для работы с dnevnik.ru
Работает на основе прямой авторизации на сайт и парсинга html страниц с помощью aiohttp + bs4, так как официально получить доступ к их API может быть проблемой.
За идею взят проект синхронной библиотеки paracosm17
Requirements::
aiohttp
bs4
lxml
Функции:
- Получение страницы дневника за неделю: расписание, оценки, число прогулов, домашние задания
- Получение пользователей
- Получение именинников
- Поддержка авторизации как через дневник.ру, так и через госуслуги
Example:
from dnevnik import Dnevnik
import asyncio
async def main():
login, password = "cyberkid", "qwerty1"
async with Dnevnik(login, password) as d:
print("Авторизация на дневник.ру")
await d.auth()
# получения списка одноклассников
class_users = await d.get_class_users()
print("Одноклассники:", class_users.count)
print(*[u.full_name for u in class_users.items[:5]], sep="\n")
# календарь с числом именинников
print("Календарь с месяцем, днём и ссылкой на него")
# TODO, сделать запросы через этот объект для поиска именинников
cal = await d.calendar_birthdays()
print(*[f"{d.month_int()} {d.day} {d.count}" for d in cal.days[:12]])
# близ именинники
print("Именинники")
async for users in d.birthdays_near(max_pages=1):
print(users.count)
print(*[u.full_name for u in users.items[:3]], end="...")
# поиск всех людей
print("\nВсе люди:")
async for users in d.get_all_peoples(max_pages=1):
print(users.count)
print(*[u.full_name for u in users.items[:3]], sep="\n", end="...")
# поиск по строке
print("\nПоиск Олегов:")
async for users in d.search_people(name="Олег", max_page=1):
print(users.count)
print(*[u.full_name for u in users.items[:3]], sep="\n", end="...")
# дневник на неделю
print("\nРасписание:")
diary = await d.get_diary("29.09.2076")
print(diary.info)
for sc in diary.get_schedules:
print(sc.day)
print(sc.items)
print()
# output example
# имена вымышленные все совпадения с реальностью случайны
'''
Авторизация на дневник.ру
Одноклассники: 30
Серёга Михаил Михаилович
Капитан Прайс
Джонни Сильверхенд
Александр Курицин
Илья Муромец Андреевич
Календарь с ДР
1 1 6 1 2 2 1 3 3 1 4 4 1 5 4 1 6 4 1 7 6 1 8 4 1 9 3 1 10 4 1 11 3 1 12 6
Именинники
28
Шелли Леонова Алекс Мерсер Заболотный Юрий Иванович Даниил Милохин Сергеевич...
Все люди:
1518
Иван Дурак
Аркадий Аркадиевич
Семён Персунов...
Поиск Олегов:
34
Газизов Рустем Олегович
Олег Картофельный Чай
Газманов Олег...
Расписание:
Сильверхендов Джонни Школа №1 г. Найтсити" 0-undefined 2076 / 2077 с 29.09 по 05.10
понедельник
('Литература', 'Литература', 'Химия', 'Обществознание', 'Физкультура', 'История')
вторник
('Алгебра', 'Геометрия', 'Биология', 'Физика', 'Физика', 'География')
среда
('Физика', 'Алгебра', 'Инф. и ИКТ', 'Инф. и ИКТ', 'Обществознание', 'Англ. язык', 'ОБЖ')
четверг
('Алгебра', 'Геометрия', 'Англ. язык', 'Инф. и ИКТ', 'Инф. и ИКТ', 'Физика', 'Рус. язык')
пятница
('Физкультура', 'История', 'Алгебра', 'Химия', 'Литература', 'Физика', 'Англ. язык')
суббота
[]
воскресенье
[]
'''
if __name__ == '__main__':
asyncio.run(main())
Если авторизация работает только через госуслуги:
Ну блин жааааль. Необходимо дополнительно установить playwright для эмуляции браузера:
pip install playwright
install playwright
Пример авторизации госуслуги:
import asyncio
from session_gos import GosDiary
from gos_regions import KIROV_REGION # ваш регион, в котором находится дневник
async def main():
login, password = "79123456789", "qwerty123"
gos_d = GosDiary(login, password, region_url=KIROV_REGION)
diary = await gos_d.auth()
async with diary as d:
await d.get_class_users()
# ... далее работа аналогична с классом Dnevnik
asyncio.get_event_loop().run_until_complete(main())
TODO:
- Добавить авторизацию через госуслуги
- Добавить 2FA госуслуги
- добавить некоторых методов для объектов
- добавить автотесты
- Поправить doc-strings
- Сделать страницу с документацией и примерами
- рефакторинг кода (рефакторинг???)
- опубликовать модуль на pypi
- сделать репозиторий-пример простого telegram бота для работы с этой библиотекой
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
dnevnikru_aio-1.0.tar.gz
(13.9 kB
view details)
File details
Details for the file dnevnikru_aio-1.0.tar.gz
.
File metadata
- Download URL: dnevnikru_aio-1.0.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 894762b0ebda3a40cd0990657cd0fe315945a8298c5efeb8f89afdafbe8e5283 |
|
MD5 | 5ec35660f9e4c66e94c73ca056c5f480 |
|
BLAKE2b-256 | 3fc0ae4f556a809e6b83ba1ff5827f540f50c80a6041d5ba08becd6b4846207d |