Лаборатория #5
Запознайте се с Botfather
Първо, ще разгледаме прост пример за създаване на така наречения ехо бот. За да регистрирате нов телеграм бот, трябва да следвате няколко прости стъпки, които са описани подробно в това ръководство. По-долу е даден пример за регистриране на бот с име cs102_bot:
Моля, обърнете внимание, че последният отговор на BotFather беше токен за достъп ( access_token ), който ще ни трябва в по-нататъшна работа.
На настоящия етап ботът, който създадохме, не може да прави нищо и не знае нито една команда. За да „обучим“ бота, ще използваме API, предоставен от telegram:
Bot API е базиран на HTTP интерфейс, създаден за разработчици, запалени по изграждането на ботове за Telegram
Няма да работим директно с API, както направихме в Lab #4, а ще използваме модула pyTelegramBotAPI. Подробно ръководство на български език за работа с този модул можете да намерите тук.
Сега трябва да инсталираме модула pyTelegramBotAPI:
По-долу е даден пример за обикновен ехо бот, който дублира всяко ваше съобщение:
Можете да стартирате бота по следния начин:
Сега отидете на telegram и напишете произволно съобщение на вашия бот:
Направете бота по-умен
Сега нека обучим нашия бот да прави малко повече и да разбира командите. Целта на цялата работа е да се напише бот, който да ви позволи да получите график на класа за всяка група. Ботът трябва да разбира следните команди:
- near_lesson GROUP_NUMBER - най-близкото занимание за посочената група;
- ДЕН WEEK_NUMBER GROUP_NUMBER - график на занятията за посочения ден ( понеделник, вторник, . ). Седмицата може да бъде четна ( 1 ), нечетна ( 2 ) или четна и нечетна ( 0 );
- tommorow GROUP_NUMBER - график за следващия ден (ако е неделя, тогава се показва графикът за понеделник, като се има предвид, че седмицата може да бъде четна или нечетна);
- всички WEEK_NUMBER GROUP_NUMBER - график за цялата седмица.
Нека да разгледаме пример с изхода на графика за понеделник. За да направим това, трябва да получим html кода на страницата за съответната група и след това да изберем информацията, която ни интересува от тази страница.
Забележка: За да ви е по-лесно да навигирате в работата, се препоръчва да изтеглите пример за всяка страница с график:
За да получите изходния код на страницата, е достатъчно да изпълните GET заявка. URL адресът, до който ще имаме достъп, има следния формат:
Когато WEEK е седмица (четно-нечетно), ако седмицата не е посочена, тогава графикът включва както четни, така и нечетни седмици; ГРУПА - номер на група.
Сега от тази страница трябва да извлечем часа на занятията, мястото, публиката и името на дисциплината. За целта се нуждаем от HTML анализатор. Тази статия предлага използването на модула BeautifulSoup.
Методите find и find_all ви позволяват да намирате тагове с посочените атрибути.
Така получихме времето, мястото и името на дисциплината (получаването на броя на публиката остава за самоизпълнение). И накрая, нека добавим към нашия бот възможността да показва графика за понеделник:
Поставяме бота в мрежата
Последната част от лабораторията е посветена на хостването на бот в облачната платформа Heroku.
От вас се изисква да се регистрирате в Heroku и да създадете ново приложение там:
В папката на вашия проект създайте три файла:
- runtime.txt - версията на интерпретатора на Python, необходима за стартиране на приложението;
- requirements.txt - модули, необходими за работа на приложението;
- Procfile - показва типа на приложението и основния клас (в нашия случай това е съответно приложение на python и файл bot.py).
Пример за съдържанието на тези файлове е показан по-долу:
След това отидете на раздела Разполагане, който описва подробно процеса на хостване на вашето приложение в услугата Heroku:
След натискане на heroku master, приложението автоматично настройва проекта и стартира бота. Ако успее, вашият бот трябва да работи на отдалечената машина. За да проследите напредъка на тези операции и да намерите възможни грешки, въведете heroku logs --tail в конзолата