it Новости Телеграмм и коронавирус / Пишем бота на Python с отслеживанием данных
Телеграмм и коронавирус / Пишем бота на Python с отслеживанием данных

Телеграмм и коронавирус / Пишем бота на Python с отслеживанием данных

16 640
31 марта 2020 в 17:03

За последнии несколько недель коронавирус охватил паникой практически все страны мира и сейчас найти человека не знающего что такое коронавирус очень и очень сложно.

За последние дни каждый из нас часто начал заходить на сайты, которые предоставляют актуальные данные по количеству заболевших в разных странах мира. Сервисы эти, безусловно, полезны, но все же они не столь удобны для частого их использования.



Куда проще отслеживать данные по интересующей вас стране через телеграмм, а именно через специального бота. Подобные боты уже делали, но нам все равно интересно сделать своего и плюс показать процесс создания такого бота.



В первую очередь разберемся с инструментами. Мы будем использовать язык Питон, а также программу PyCharm для написания кода. В программе создаем новый проект, к примеру App, а внутри проекта создаем новый файл, к примеру main.py.


Отслеживание данных

Устанавливаем библиотеку под названием COVID19Py. После установки импортируем её в проект, а также создаем объект на основе необходимого класса. Библиотека максимально удобна и все что нам требуется сделать, чтобы получить полную информацию про больных, так это прописать обращение к методу getLatest() и вывести информацию в консоль.

import COVID19Py
covid19 = COVID19Py.COVID19()
latest = covid19.getLatest()
print(latest)

И да, чтобы у нас все заработало не забываем установить библиотеку requests. Эта библиотека работает с подключением к различным веб сайтам и она используется в COVID19Py, поэтому без неё никуда.


После запуска мы получаем необходимую информацию. Выведенная информация сообщает нам об общем количестве заболевших во всем мире.


Если еще немного поиграться с кодом, то можно получить необходимые данные по определенной стране. При чем мы можем получить данные как про общее население, так и про количество заболевших или же умерших людей.

import COVID19Py
covid19 = COVID19Py.COVID19()
location = covid19.getLocationByCountryCode("US")
print(location)

Окей, первая часть программы завершена. Теперь нам нужно сделать так, чтобы все это работало в телеграмм боте.


Разработка телеграмм бота

Для работа с API телеграмма необходимо использовать одну из возможных библиотек. Библиотек много, но давайте сейчас остановимся на pyTelegramBotAPI как на одной из наиболее продвинутых библиотек.


Сперва выполняем её установку в проект. После установки импортируем её, а также устанавливаем API ключ для бота.


Получить ключ для бота можно через другого специального бота в телеграмме. Этот бот называется BotFather. Работать с ботом очень просто и всё что нам нужно сделать, так это обратиться к «папе боту», создать в нём нового бота, придумать название и после этого получить API ключ. Кстати, здесь же вы можете указать описание для бота, фото и прочую инфу. Если захотите, то с этим неплохо можно поиграться.



Вставляем полученный ключ в программу. Теперь давайте создадим функцию, которая будет срабатывать при отправке команды start. Также создадим функцию, что будет обрабатывать все сообщения от пользователя. Весь код представлен ниже:

import telebot
from telebot import types
import COVID19Py

covid19 = COVID19Py.COVID19()
bot = telebot.TeleBot('ВАШ_API_КЛЮЧ')

# Функция, что сработает при отправке команды Старт
# Здесь мы создаем быстрые кнопки, а также сообщение с привествием
@bot.message_handler(commands=['start'])
def start(message):
	markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
	btn1 = types.KeyboardButton('Во всём мире')
	btn2 = types.KeyboardButton('Украина')
	btn3 = types.KeyboardButton('Россия')
	btn4 = types.KeyboardButton('Беларусь')
	markup.add(btn1, btn2, btn3, btn4)

	send_message = f"<b>Привет {message.from_user.first_name}!</b>\nЧтобы узнать данные про коронавируса напишите " \
		f"название страны, например: США, Украина, Россия и так далее\n\nЗаходи к нам на сайт <a href='https://itproger.com'>itProger</a>"
	bot.send_message(message.chat.id, send_message, parse_mode='html', reply_markup=markup)

# Функция, что сработает при отправке какого-либо текста боту
# Здесь мы создаем отслеживания данных и вывод статистики по определенной стране
@bot.message_handler(content_types=['text'])
def mess(message):
	final_message = ""
	get_message_bot = message.text.strip().lower()
	if get_message_bot == "сша":
		location = covid19.getLocationByCountryCode("US")
	elif get_message_bot == "украина":
		location = covid19.getLocationByCountryCode("UA")
	elif get_message_bot == "россия":
		location = covid19.getLocationByCountryCode("RU")
	elif get_message_bot == "беларусь":
		location = covid19.getLocationByCountryCode("BY")
	elif get_message_bot == "казакхстан":
		location = covid19.getLocationByCountryCode("KZ")
	elif get_message_bot == "италия":
		location = covid19.getLocationByCountryCode("IT")
	elif get_message_bot == "франция":
		location = covid19.getLocationByCountryCode("FR")
	elif get_message_bot == "германия":
		location = covid19.getLocationByCountryCode("DE")
	elif get_message_bot == "япония":
		location = covid19.getLocationByCountryCode("JP")
	else:
		location = covid19.getLatest()
	final_message = f"<u>Данные по всему миру:</u>\n<b>Заболевших: </b>{location['confirmed']:,}\n<b>Сметрей: </b>{location['deaths']:,}"

	if final_message == "":
		date = location[0]['last_updated'].split("T")
		time = date[1].split(".")
		final_message = f"<u>Данные по стране:</u>\nНаселение: {location[0]['country_population']:,}\n" \
				f"Последнее обновление: {date[0]} {time[0]}\nПоследние данные:\n<b>" \
				f"Заболевших: </b>{location[0]['latest']['confirmed']:,}\n<b>Сметрей: </b>" \
				f"{location[0]['latest']['deaths']:,}"

	bot.send_message(message.chat.id, final_message, parse_mode='html')

# Это нужно чтобы бот работал всё время
bot.polling(none_stop=True)

Наш бот

Сейчас каждый может протестировать нашего бот по этой ссылке. Как видите, реализация бота это просто и никаких особых усердий не требуется.


Видео на эту тему

Также вы можете просмотреть детальное видео по разработке данного бота:




Дополнительный курс

На нашем сайте также есть углубленный курс по изучению языка Питон. В ходе огромной программы вы изучите не только язык Питон, но также научитесь создавать веб сайты за счёт веб технологий и фреймворка Джанго. За курс вы изучите массу нового и к концу программы будете уметь работать с языком Питон, создавать на нём полноценные ПК приложения на основе библиотеки Kivy, а также создавать веб сайты на основе библиотеки Джанго.


Больше интересных новостей

Комментарии (4)
Добавить комментарий

валерий 19 ноября 2022 в 19:01

location = covid19.getLocationByCountryCode("BY")
AttributeError: module 'COVID19Py.covid19' has no attribute 'getLocationByCountryCode'

вот такая ошибка помогите исправить
Ответить

Сергей 14 мая 2022 в 22:05

не работает бот
Ответить

Олег 09 мая 2022 в 10:59

Да, забывать импорты явно не стоит! Как я мог провтыкать...
Ответить

Олег 09 мая 2022 в 10:46

Забыл выполнить импорт:
from telebot import types
И у меня ничего не работало! Не забывайте указывать все импорты!!
Ответить