Package: dnevnikru-aio
НеофициальныйасинхронныйAPI для работы с dnevnik.ruРаботает на основе прямой авторизации на сайт и парсинга html страниц с помощью aiohttp + bs4, так как официально
получить доступ к их API может быть проблемой.За идею взят проект синхронной библиотекиparacosm17Requirements::aiohttp
bs4
lxmlФункции:Получение страницы дневника за неделю: расписание, оценки, число прогулов, домашние заданияПолучение пользователейПолучение именинниковПоддержка авторизации как через дневник.ру, так и через госуслугиExample:fromdnevnikimportDnevnikimportasyncioasyncdefmain():login,password="cyberkid","qwerty1"asyncwithDnevnik(login,password)asd:print("Авторизация на дневник.ру")awaitd.auth()# получения списка одноклассниковclass_users=awaitd.get_class_users()print("Одноклассники:",class_users.count)print(*[u.full_nameforuinclass_users.items[:5]],sep="\n")# календарь с числом именинниковprint("Календарь с месяцем, днём и ссылкой на него")# TODO, сделать запросы через этот объект для поиска именинниковcal=awaitd.calendar_birthdays()print(*[f"{d.month_int()}{d.day}{d.count}"fordincal.days[:12]])# близ именинникиprint("Именинники")asyncforusersind.birthdays_near(max_pages=1):print(users.count)print(*[u.full_nameforuinusers.items[:3]],end="...")# поиск всех людейprint("\nВсе люди:")asyncforusersind.get_all_peoples(max_pages=1):print(users.count)print(*[u.full_nameforuinusers.items[:3]],sep="\n",end="...")# поиск по строкеprint("\nПоиск Олегов:")asyncforusersind.search_people(name="Олег",max_page=1):print(users.count)print(*[u.full_nameforuinusers.items[:3]],sep="\n",end="...")# дневник на неделюprint("\nРасписание:")diary=awaitd.get_diary("29.09.2076")print(diary.info)forscindiary.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Пример авторизации госуслуги:importasynciofromsession_gosimportGosDiaryfromgos_regionsimportKIROV_REGION# ваш регион, в котором находится дневникasyncdefmain():login,password="79123456789","qwerty123"gos_d=GosDiary(login,password,region_url=KIROV_REGION)diary=awaitgos_d.auth()asyncwithdiaryasd:awaitd.get_class_users()# ... далее работа аналогична с классом Dnevnikasyncio.get_event_loop().run_until_complete(main())TODO:Добавить авторизацию через госуслугиДобавить 2FA госуслугидобавить некоторых методов для объектовдобавить автотестыПоправить doc-stringsСделать страницу с документацией и примерамирефакторинг кода (рефакторинг???)опубликовать модуль на pypiсделать репозиторий-пример простого telegram бота для работы с этой библиотекой