habrahabr

Небольшой модуль для работы с dnevnik.ru на python

  • пятница, 1 октября 2021 г. в 00:34:27
https://habr.com/ru/post/580992/
  • Python
  • *
  • Программирование
  • *


Небольшой модуль для работы с dnevnik.ru на python

Python *Программирование *
Из песочницы

Привет, Хабр. Это моя первая статья, и сегодня я хочу рассказать вам про свой первый модуль на 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))

>>>
['К*****о Савелий Сергеевич']

Итог

Что же, для меня эта библиотека стала первым опытом написания «открытых» проектов, поэтому, если Вы обнаружили какие-то баги/некачественный код/ и прочее, что можно исправить - сообщайте. Я буду только рад улучшить свой проект. Всем удачи.

Теги: pythonмодульбиблиотекадневникдневник.ру
Хабы: Python Программирование
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0