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 hashes)