- PVSM.RU - https://www.pvsm.ru -
Приветствую, Хабровчане! Недавно я писал статью [1] про то, как написать парсер дневника МРКО, а в конце пообещал написать про интеграцию с Телеграм ботом, о чем очень жалею. Сейчас бот [2] уже готов и полностью функционирует. Хочу рассказать вам, что использовал и с какими трудностями столкнулся в этой работе.
Для создания моего бота [2](@mrkorobot), я решил использовать библиотеку pyTelegramBotAPI [3]. Она проста в установке, удобна в использовании и для нее даже написали хорошую книгу [4]. В боте я использую следующие библиотеки:
Для доступа к дневнику нужны логин и пароль. Первым делом нужно запросить их у пользователя и положить в базу данных. Раз логин и пароль нужны каждый раз, как пользователь обращается к боту, надо было выбрать быструю БД. Мой выбор пал на Redis [9], а для работы с ней в Питоне было решено использовать одноименную библиотеку [8]. Предварительно зашифровав пароль в md5 [10] с помощью встроенной в Питон библиотеки hashlib, я положил их в БД под ключ, имя которого просто id пользователя в Телеграме. Вот наглядное представление:
{
"id_пользователя": ["логин", "пароль_в_MD5"]
}
При использовании такой схемы, можно сразу проверить, если ячейка с таким id есть, значит пользователь авторизован, если нет — нет.
В результате получился бот, который может показывать расписание уроков по дням, домашние задания, оценки по предметам и даже прикрепленные файлы, если они есть.
В принципе, на данный момент реализация просмотра домашнего задания заканчивается, но мне захотелось пойти еще дальше и сделать ежедневные уведомления об оценках. Подумав, мне удалось написать простенький скрипт, который я добавил в cron, сгенерировав выражение здесь [11]. Логика до боли проста: сначала добываем список всех авторизованных пользователей (предоставивших боту логин и пароль) и проверяем, если пользователь включил ежедневные уведомления, если да — отправляем оценки в таком формате:
Никогда еще проверка дневника не была такой легкой!
Еще мне захотелось реализовать функцию просмотра личных сообщений. "Почему бы и нет?" — подумал я и написал метод, позволяющий просматривать входящие сообщения. Ничего сложного, на удивление, здесь не было. Просто обращаться надо было не к mrko.mos.ru/dnevnik/services/dnevnik.php?r=1&first=1, а к mrko.mos.ru/dnevnik/services/mail.php?r=0. Потом привычный парсинг и вот все готово:
Кстати, с
Для меня очень важно, чтобы вы попробовали Дневник.Бота [2](@mrkorobot) в работе и дали свои соображения. Все идеи рассматриваются очень внимательно. Счастливого программирования!
Автор: MonsterAndrew
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/252826
Ссылки в тексте:
[1] статью: https://habrahabr.ru/post/323856/
[2] бот: https://t.me/mrkorobot
[3] pyTelegramBotAPI: https://github.com/eternnoir/pytelegrambotapi
[4] книгу: https://www.gitbook.com/book/groosha/telegram-bot-lessons/details
[5] Tornado: http://www.tornadoweb.org/en/stable/
[6] Requests: http://docs.python-requests.org/en/master/
[7] BeautifulSoup: https://www.crummy.com/software/BeautifulSoup/bs4/doc/
[8] Redis: https://redislabs.com/lp/python-redis/
[9] Redis: https://redis.io
[10] md5: https://ru.wikipedia.org/wiki/MD5
[11] здесь: https://crontab.guru
[12] хостингом: https://www.reg.ru/?rlink=reflink-717
[13] Источник: https://habrahabr.ru/post/326582/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.