Привет, Хабр. Это моя первая статья, и сегодня я хочу рассказать вам про свой первый модуль на python. Называется он dnevnikru. Я написал его для облегчения работы с сайтом дневника. Работает модуль по принципу парсера, а не получает данные через API.
Идея написать такой модуль пришла мне после идеи написать телеграм бота для просмотра оценок и домашних заданий из Дневника.ру
Почему не через API?
Это сделано потому что Администрация Дневника отказывает разработчикам в предоставлении доступа к API. А если вам и не откажут, то всё равно за доступ нужно будет платить.
Конечно, функционал этого модуля не сравнится с функционалом, предоставляемым официальным API. Я добавил только самые необходимые функции, о которых я расскажу ниже.
Как этим пользоваться?
Сам модуль находится в github репозитории. Для использования нужно просто скачать файл dnevnikru.py и поместить в одну папку с Вашим проектом. А также установить необходимые библиотеки из файла requirements.txt
Доступные методы
На момент написания статьи, я реализовал 4 метода.
homework - получение домашних заданий за определенный период
marks - получение оценок за определенный период
searchpeople - поиск людей по Вашей школе
birthdays - дни рождения людей из Вашей школы
Подробнее о методах:
homework
Принимает 4 необязательных параметра
datefrom - С какой даты отобразить Д/З (в формате dd.mm.yyyy). По умолчанию стоит текущий день.
dateto - До какой даты отобразить Д/З (в формате dd.mm.yyyy). По умолчанию +10 дней к datefrom
days - На сколько дней вперед отобразить (Используется когда ни datefrom, ни dateto не указаны, либо когда указан только datefrom)
studyYear - учебный год (Используется для просмотра домашних заданий прошлых лет)
Возвращает список списков с ДЗ
Пример
from dnevnikru import Dnevnik
from pprint import pprint
dn = Dnevnik(login="login", password="password")
pprint(dn.homework(days=2))
>>>
[['Англ. язык', 'SB ex.7 p.13 ( письменно)', '27 сентября 2021 2 урок'], ['Реш.задач по матем', 'вариант 3 сентябрь', '27 сентября 2021 3 урок'],
['Физика', '§89, задачи 727, 729, 732, 733,735,742\n', '27 сентября 2021 5 урок'],
['Литература', 'Читать М.Горький "На дне".', '28 сентября 2021 3 урок']]
marks
Принимает 2 необязательных параметра
index - Обычно это сколько лет вы учитесь в своей школе минус 1. Используется для отображения оценок за определенный учебный год. По дефолту - пустое значение (возвратиться текущий год)
period - Номер текущего семестра минус 1. (Например, если Вы желаете посмотреть оценки за 3 семестр, то нужно указывать 2) По дефолту это пустое значение - возвращается текущий семестр
Возвращает список списков с оценками
Пример
from dnevnikru import Dnevnik
from pprint import pprint
dn = Dnevnik(login="login", password="password")
pprint(dn.marks())
>>>
[['1', 'Алгебра и НА', 'ППБП2', '0', '4', '1', '2', ''], ['2', 'Англ. язык', 'ППН', '0', '3', '0', '', ''], ['3', 'Биология', '', '0', '0', '0', '', ''],
['4', 'Геометрия', '5БП', '0', '2', '1', '5', '']
....]
Третий элемент - это оценки, а дальше идут дополнительные поля (кол-во опозданий, пропусков, по болезни и т. д.)
searchpeople
Принимает 3 необязательных параметра
group - Группа среди которой нужно искать людей. По умолчанию пустое значение, будет искать среди всех (all). Доступные группы - 'all', 'students', 'staff', 'director', 'management', 'teachers', 'administrators'
name - Поиск по имени. Можно вводить имя, фамилию, ФИО, разные форматы.
grade - Поиск по классу. Опять же, можно использовать разные форматы. Например: "11Б", "8 Г", "9.1" - для тех, у кого в школе не буквы, а цифры.
Возвращает список списков с людьми и их группой
Пример
from dnevnikru import Dnevnik
from pprint import pprint
dn = Dnevnik("login", "password")
pprint(dn.searchpeople(name="Алексей", grade="7А"))
>>>
[['К******цев Алексей Сергеевич', 'Родитель'],
['Т*******нов Алексей Николаевич', 'Родитель']]
Фамилии скрыл на всякий случай
birthdays
Принимает 3 необязательных параметра
day (int) - день (по умолчанию текущая дата)
month (int) - месяц
group - Группа среди которой нужно искать людей. По умолчанию пустое значение, будет искать среди всех (all). Доступные группы - 'all', 'students', 'staff', 'director', 'management', 'teachers', 'administrators'
Пример
from dnevnikru import Dnevnik
from pprint import pprint
dn = Dnevnik("login", "password")
pprint(dn.birthdays(day=10, month=9))
>>>
['К*****о Савелий Сергеевич']
Итог
Что же, для меня эта библиотека стала первым опытом написания «открытых» проектов, поэтому, если Вы обнаружили какие-то баги/некачественный код/ и прочее, что можно исправить - сообщайте. Я буду только рад улучшить свой проект. Всем удачи.