Мне необходимо было написать телеграм бота для школы, который будет сообщать детям о дедлайнах по онлайн обучению. Для этого я буду использовать ЯП Python и библиотеку PyTelegramBot.
Техническое задания
Необходимо что бы бот получал информацию с электронного дневника и Google Classroom и по команде отправлял ученику. Так же необходима возможность получения информации о предстоящих онлайн уроках.
Реализация идеи
На сервере будут запущены 2 программы. Одна планировщиком будет запускаться каждые 3 часа и выгружать в текстовый файл информацию о дедлайнах. Для хранения информации я использую XML файл с такой структурой: (согласен что это очень топорно, но одной из моих задач, как учителя было объяснить детям принцип его работы)
Аналогично хранится информация о будущих лекциях.
Для парсеринга информации с сайта и получения информации из файла я использую библиотеку BeautifulSoup.
Таким образом для храниния информации мы используем массив в котором находятся словарики, в котором находится массив.... Да кажется довольно сложно, но если вникнуть, то все становится более - менее понятно:
Сортировка заданий
Пишем процедуру которая возвращает список лекций, которые будет не больше чем через days дней. Для этого пробегаемся по основному и запоминаем название предмета (subject). Если по нему найдена информация, то добавляем его в ответ бота. А после этого добавляем список всех домашек по нему. Если прям вообще ничего не найдено, то возвращаем что дз нет.
Аналогичным образом работает поиск лекций
Обработчик команд
1. При команде help бот выводит список команд. Довольно банальная вещь. Parse_mode поваляет использовать более простое форматирование текста в сообщениях.
2. На команду /deadline бот должен ответить список домашней работы на ближайшую неделю (7 дней).
В конце пишем команду, которая включает бота и указываем timeout, т.е время в течении которого от будет пытаться отвечать на запрос.
Анализируем результат
При запросе домашки бот выдаёт вот такой результат. Все названия предметов кликабельны, можно нажать и перейти в электронный дневник.
Информация об онлайн уроках выглядит таким образом. Все ссылки тоже кликабельны:
В случае если лекций несколько он выводит их подряд, не сортируя по предмету. Это особо и не много, так как у детей обычно 2 -3 лекции в день