СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Методическая разработка «Создание Telegram-бота на Python. Прогноз погоды»

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Методическая разработка «Создание Telegram-бота на Python. Прогноз погоды»»

МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ

«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»













Методическая разработка

«Создание Telegram-бота на Python.

Прогноз погоды»

к дополнительной общеобразовательной

общеразвивающей программе

технической направленности

«Программирование на Python»



Возраст детей: 10-17 лет









Автор: Костычев Вадим Александрович









г. Заречный Пензенской области

2025 г.


В современном мире мессенджеры, такие как Telegram, стали неотъемлемой частью повседневной жизни. Telegram насчитывает более 700 миллионов активных пользователей (по данным на 2023 год), и число продолжает расти. Боты в Telegram активно используются для автоматизации задач, предоставления информации, развлечений, обучения и бизнеса. Создание Telegram-бота — это востребованный навык, который позволяет:

  • Автоматизировать процессы: Боты могут отвечать на запросы клиентов, отправлять уведомления, собирать данные.

  • Развивать проекты: От личных помощников до коммерческих сервисов (например, боты для интернет-магазинов).

  • Изучать программирование: Работа с API Telegram помогает освоить навыки работы с сетевыми запросами, асинхронным программированием и Python.

  • Создавать портфолио: Бот — это практический проект, который демонстрирует навыки разработчика.

  • Адаптироваться к трендам: В 2025 году автоматизация и чат-боты остаются ключевыми направлениями в IT, особенно в сочетании с ИИ.


Этот материал актуален для начинающих программистов, которые хотят изучить Python на практике, а также для опытных разработчиков, желающих освоить новые инструменты. Telegram-боты просты в создании, но предоставляют широкие возможности для масштабирования (например, интеграция с базами данных, ИИ, вебхуками).


Цель: создать Telegram-бота, который по запросу пользователя предоставляет текущую погоду в указанном городе.

Задачи:

  1. Зарегистрировать бота в Telegram через BotFather.

  2. Настроить окружение для разработки на Python.

  3. Освоить библиотеку python-telegram-bot и API OpenWeatherMap.

  4. Реализовать функционал обработки команд и запросов погоды.

  5. Протестировать и развернуть бота.


Для создания бота вам понадобится:

  1. Python (версия 3.8 или выше).

  2. IDE или текстовый редактор: PyCharm, VS Code или другой.

  3. Библиотеки:

    • python-telegram-bot — для работы с Telegram API.

    • requests — для отправки запросов к API погоды.

  4. Telegram — приложение для тестирования бота.

  5. Аккаунт OpenWeatherMap — для получения API-ключа.

  6. Интернет-соединение.


Шаг 1: Регистрация бота в Telegram

  1. Найдите @BotFather в Telegram.

  2. Создайте бота:

    • Отправьте команду /start.

    • Затем выполните /newbot.

    • Укажите имя бота, например, «Погодный Бот».

    • Задайте уникальное имя пользователя, заканчивающееся на «Bot» (например, @WeatherBot).

Получите токен:

  • @BotFather отправит токен вида: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11.

  • Сохраните токен в безопасном месте и не делитесь им.



Шаг 2: Регистрация на OpenWeatherMap

  1. Создайте аккаунт:

    • Перейдите на openweathermap.org.

    • Зарегистрируйтесь или войдите.

  2. Получите API-ключ:

    • Перейдите в раздел «API keys» в личном кабинете.

    • Скопируйте ключ (например, abcdef1234567890abcdef1234567890).

    • Сохраните ключ — он понадобится для запросов погоды.

Примечание: Бесплатный план OpenWeatherMap позволяет делать до 60 запросов в минуту, что достаточно для тестирования.

Шаг 3: Настройка окружения

  1. Установите Python:

Скачайте Python с python.org, если он не установлен.

  1. Создайте проект:

  • Создайте папку weather_bot.

  • Откройте терминал в этой папке.



Установите библиотеки:

  • Выполните команды:

pip install python-telegram-bot

pip install requests



Создайте файл:

Создайте файл weather_bot.py в папке проекта.

Шаг 4: Написание кода бота

Бот будет:

  • Отвечать на команду /start приветствием.

  • Обрабатывать команду /weather и отправлять текущую погоду.

  • Отвечать на некорректные запросы с подсказкой.

Код бота

Откройте weather_bot.py и вставьте код:



import requests

from telegram import Update

from telegram.ext import (

Application,

CommandHandler,

MessageHandler,

filters,

ContextTypes,

)



# Токен Telegram-бота

TOKEN = "ВАШ_ТЕЛЕГРАМ_ТОКЕН"



# Ключ API OpenWeatherMap

WEATHER_API_KEY = "ВАШ_OPENWEATHERMAP_КЛЮЧ"



# URL для запроса погоды

WEATHER_API_URL = "http://api.openweathermap.org/data/2.5/weather"



# Функция для команды /start

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):

await update.message.reply_text(

"Привет! Я бот, который расскажет о погоде. "

"Используй команду /weather , например: /weather Москва"

)



# Функция для получения погоды

def get_weather(city: str) - str:

params = {

"q": city,

"appid": WEATHER_API_KEY,

"units": "metric", # Температура в градусах Цельсия

"lang": "ru" # Язык ответа — русский

}

try:

response = requests.get(WEATHER_API_URL, params=params)

response.raise_for_status() # Проверка на ошибки HTTP

data = response.json()



if data.get("cod") != 200:

return "Город не найден. Попробуй ещё раз!"



# Извлекаем данные о погоде

temp = data["main"]["temp"]

description = data["weather"][0]["description"]

humidity = data["main"]["humidity"]

wind_speed = data["wind"]["speed"]



return (

f"Погода в {city}:\n"

f"Температура: {temp}°C\n"

f"Описание: {description}\n"

f"Влажность: {humidity}%\n"

f"Скорость ветра: {wind_speed} м/с"

)

except requests.RequestException:

return "Ошибка при запросе погоды. Проверь соединение или попробуй позже."



# Функция для команды /weather

async def weather(update: Update, context: ContextTypes.DEFAULT_TYPE):

# Проверяем, указан ли город

if not context.args:

await update.message.reply_text("Укажи город, например: /weather Москва")

return



city = " ".join(context.args) # Объединяем аргументы в строку

weather_info = get_weather(city)

await update.message.reply_text(weather_info)



# Функция для обработки текстовых сообщений

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):

await update.message.reply_text(

"Я понимаю только команды /start и /weather . Попробуй снова!"

)



# Основная функция

def main():

application = Application.builder().token(TOKEN).build()



# Регистрируем команды

application.add_handler(CommandHandler("start", start))

application.add_handler(CommandHandler("weather", weather))



# Обрабатываем текстовые сообщения

application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))



print("Бот запущен...")

application.run_polling(allowed_updates=Update.ALL_TYPES)



if __name__ == "__main__":

main()



Объяснение кода

  1. Импорты библиотек:

    • requests — для отправки HTTP-запросов к OpenWeatherMap.

    • Модули из telegram.ext — для работы с Telegram API.

  2. Константы:

    • TOKEN — токен Telegram-бота (замените на свой).

    • WEATHER_API_KEY — ключ OpenWeatherMap (замените на свой).

    • WEATHER_API_URL — базовый URL для API погоды.

  3. Функция start:

    • Отправляет приветственное сообщение с инструкцией.

  4. Функция get_weather:

    • Формирует запрос к OpenWeatherMap с параметрами: город, ключ API, единицы измерения (градусы Цельсия), язык (русский).

    • Обрабатывает ответ, извлекая температуру, описание, влажность и скорость ветра.

    • Возвращает отформатированную строку или сообщение об ошибке.

  5. Функция weather:

  • Проверяет, указан ли город (context.args).

  • Вызывает get_weather и отправляет результат пользователю.

  1. Функция echo:

  • Отвечает на некорректные сообщения, напоминая о доступных командах.

  1. Функция main:

  • Создаёт приложение Telegram.

  • Регистрирует обработчики для команд /start, /weather и текстовых сообщений.

  • Запускает бота в режиме polling.



Шаг 5: Запуск и тестирование

  1. Обновите код:

    • Замените ВАШ_ТЕЛЕГРАМ_ТОКЕН и ВАШ_OPENWEATHERMAP_КЛЮЧ на ваши данные.

  2. Запустите бота:

В терминале выполните:



python weather_bot.py



Увидите сообщение: Бот запущен....



  1. Протестируйте:

  • Найдите бота в Telegram (например, @WeatherBot).

  • Отправьте /start — бот ответит приветствием.

  • Попробуйте /weather Москва — бот отправит погоду.

  • Напишите что-то вроде «Привет» — бот напомнит о командах.

  • Тестируйте с разными городами: /weather Лондон, /weather Токио.

  1. Остановите бота:

  • Нажмите Ctrl+C в терминале.



Пример ответа бота:

Погода в Москва:

Температура: 5°C

Описание: небольшой дождь

Влажность: 80%

Скорость ветра: 3 м/с



Шаг 6: Расширение функционала

Добавьте дополнительные возможности, чтобы бот стал полезнее:

1. Прогноз на несколько дней

Используйте API /forecast от OpenWeatherMap:



WEATHER_FORECAST_URL = "http://api.openweathermap.org/data/2.5/forecast"



Создайте команду /forecast :



async def forecast(update: Update, context: ContextTypes.DEFAULT_TYPE):

if not context.args:

await update.message.reply_text("Укажи город, например: /forecast Москва")

return

city = " ".join(context.args)

params = {"q": city, "appid": WEATHER_API_KEY, "units": "metric", "lang": "ru"}

try:

response = requests.get(WEATHER_FORECAST_URL, params=params)

data = response.json()

forecast = data["list"][0] # Первый прогноз (на ближайшее время)

temp = forecast["main"]["temp"]

description = forecast["weather"][0]["description"]

await update.message.reply_text(

f"Прогноз в {city}:\nТемпература: {temp}°C\nОписание: {description}"

)

except:

await update.message.reply_text("Ошибка прогноза. Попробуй снова!")



Добавьте в main():



application.add_handler(CommandHandler("forecast", forecast))



2. Отправка эмодзи

Добавьте эмодзи для погоды (например, ☀️ для ясной погоды):



def get_weather_emoji(description: str) - str:

if "ясно" in description:

return "☀️"

elif "дождь" in description:

return "🌧️"

elif "облачно" in description:

return "☁️"

return ""



# В get_weather добавьте:

emoji = get_weather_emoji(description)

return f"Погода в {city} {emoji}:\n..."



3. Уведомления о погоде

Используйте job_queue для отправки погоды по расписанию:



async def daily_weather(context: ContextTypes.DEFAULT_TYPE):

city = context.job.data

weather_info = get_weather(city)

await context.bot.send_message(

chat_id=context.job.context, text=weather_info

)



async def set_notification(update: Update, context: ContextTypes.DEFAULT_TYPE):

if not context.args:

await update.message.reply_text("Укажи город, например: /notify Москва")

return

city = " ".join(context.args)

chat_id = update.message.chat_id

# Устанавливаем уведомление на 8 утра каждый день

context.job_queue.run_daily(

daily_weather,

time=datetime.time(hour=8, minute=0),

data=city,

context=chat_id

)

await update.message.reply_text(f"Уведомления о погоде в {city} включены!")



# В main():

application.add_handler(CommandHandler("notify", set_notification))



Шаг 7: Развёртывание

Для работы бота 24/7 разверните его на сервере:

  1. Выберите платформу:

    • Бесплатные: PythonAnywhere, Render.

    • Платные: AWS, DigitalOcean.

  2. Пример для PythonAnywhere:

    • Загрузите weather_bot.py.

    • Установите библиотеки:



pip install python-telegram-bot requests



    • Запустите скрипт через консоль или настройте задачу.

  1. Мониторинг:

    • Проверяйте логи сервера, чтобы бот работал стабильно.



Вы создали Telegram-бота, который предоставляет информацию о погоде по запросу пользователя. Этот проект — отличный старт для изучения Python, API и автоматизации. Бот можно улучшить, добавив прогнозы, уведомления или даже интеграцию с ИИ для рекомендаций (например, «Возьми зонт!»).