Бот погоды в Телеграмме код

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

WeatherTelegramBot / weather_telegram_bot.py /

Code definitions
Code navigation index up-to-date

  • Go to file T
  • Go to line L
  • Go to definition R
  • Copy path
  • Copy permalink

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Cannot retrieve contributors at this time
60 lines (50 sloc) 3.73 KB

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Copy raw contents

Copy raw contents

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

ПАРСИМ ПОГОДУ ► Python Telegram Bot погоды, pyTelegramBotAPI

  • Copy lines
  • Copy permalink
  • View git blame
  • Reference in new issue

Источник: github.com

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python

2023-05-11 в 12:55, admin , рубрики: Блог компании Selectel

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 1

Хабровчане, всем привет! Меня зовут Максим Плачковский, я автор канала PythonToday. Из этой статьи вы узнаете, как написать своего Telegram-бота для получения данных о погоде в любом городе нашей планеты. Мы детально рассмотрим работу с API, парсинг JSON и напишем бота на асинхронной библиотеке aiogram. А после — загрузим его на виртуальный сервер и запустим.

Если интересно, добро пожаловать под кат!

Подготовка API и рабочего окружения

Перед написанием кода нужно получить API-токены для работы с сервисом OpenWeather и Telegram-ботом, а также подготовить рабочее окружение.

Получаем токен OpenWeather

Начнем с самого простого: зарегистрируемся на официальном сайте и в разделе My API keys создадим токен.

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 2

После того, как вы создали API-ключ, дайте ему немного «отлежаться» — обычно это занимает 10-15 минут. Спустя это время можно общаться с OpenWeather с помощью сгенерированного токена.

Telegram bot на Python + aiogram | Прогноз погоды в любом городе | API погоды | Парсинг JSON

Генерируем токен для Telegram-бота

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 3

Импортируем необходимые библиотеки

Для работы нам понадобятся модули requests и aiogram — установим их.

pip install requests aiogram

После импортируем модули и классы в файл нашего пет-проекта.

import os import datetime import requests from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor bot = Bot(token=’your_bot_token’) dp = Dispatcher(bot)

Еще по теме:  Как войти в Телеграм чтобы не было рассылки

Создание бота

Первое сообщение

Для начала проверим, что aiogram увидел бота и мы можем с ним взаимодействовать. Создадим простую асинхронную функцию start_command для ответа на команду /start . И добавляем метод start_polling для запуска бота.

Запускаем скрипт, заходим в Telegram и пишем команду /start — все работает: бот возвращает нужное сообщение.

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 4

Обрабатываем входные данные

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

OpenWeather должен принимать название города через API и возвращать данные о погоде. Исходя из документации, кроме названия города запрос должен содержать API-токен.

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 5

Усовершенствуем запрос: в параметр q будем передавать город, добавим параметр lang=ru , чтобы API работал с кириллицей. А также используем units=metric для установки метрической системы:

http://api.openweathermap.org/data/2.5/weather?q=москваunits=metricname»] cur_temp = data[«main»][«temp»] humidity = data[«main»][«humidity»] pressure = data[«main»][«pressure»] wind = data[«wind»][«speed»]

OpenWeather возвращает время рассвета и заката в формате unix timestamp. Извлечем эти данные и преобразуем в секунды.

# получаем время рассвета и преобразуем его в читабельный формат sunrise_timestamp = datetime.datetime.fromtimestamp(data[«sys»][«sunrise»]) # то же самое проделаем со временем заката sunset_timestamp = datetime.datetime.fromtimestamp(data[«sys»][«sunset»])

Зная время рассвета и заката, мы можем вернуть пользователю продолжительность дня. В результате получается следующее:

Декорируем сообщения

Разнообразим текст сообщений — будем выводить разные эмодзи в зависимости от погоды.

У словаря, который мы ранее спарсили, есть ключ main — он хранит описание погоды. На его основе мы можем создать свою коллекцию с эмодзи под разные ситуации.

code_to_smile =

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

# получаем значение погоды weather_description = data[«weather»][0][«main»] if weather_description in code_to_smile: wd = code_to_smile[weather_description] else: # если эмодзи для погоды нет, выводим другое сообщение wd = «Посмотри в окно, я не понимаю, что там за погода. »

Возвращаем данные пользователю

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

Главное — учесть формат данных. Например, OpenWeather возвращает значение давления в гектопаскалях. Так, если вы хотите отдавать пользователю данные в миллиметрах ртутного столба, значение нужно разделить на 1.33 и округлить в большую сторону.

await message.reply(f»»n f»Погода в городе: nТемпература: °C n» f»Влажность: %nДавление: мм.рт.стnВетер: м/с n» f»Восход солнца: nЗакат солнца: nПродолжительность дня: n» f»Хорошего дня!» )

Супер — бот работает и возвращает данные в удобочитаемом формате!

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 8

Деплой бота

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

Бота лучше перенести в облако. Поскольку затраты процессора на работу с простым Open Weather API минимальны, будет достаточно виртуального сервера с 1 vCPU и 1 ГБ оперативной памяти. С учетом выделенного IP-адреса такая конфигурация выйдет примерно в 30 ₽/день.

Для начала зарегистрируемся в панели управления и создадим новый сервер в разделе Облачная платформа. Затем настроим его.

Еще по теме:  Статусы в Телеграмме можно ставить

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 9

Далее подключимся к серверу по SSH, создадим виртуальное окружение для бота и загрузим его удобным способом.

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 10

Последним шагом нужно создать .service-файл, который будет автоматически поднимать бота в случае перезагрузки сервера.

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 11

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 12

Запускаем командой: systemctl enable tg_bot.service

Проверяем статус: systemctl status tg_bot.service

И перезапускаем .service-файл: systemctl restart tg_bot.service

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 13

Все готово: бот стабильно работает на сервере и автоматически поднимается в случае перезагрузки.

«Карманный синоптик за час». Пишем Telegram-бота для мониторинга погоды на Python - 14

Как мы видим, в разработке подобных Telegram-ботов нет ничего сложного. Также они не так затратны, как может показаться: для хостинга проекта не нужно платить полную стоимость сервера за месяц — в облаке оплачиваются только потребленные ресурсы по модели pay-as-you-go. Предлагайте идеи для новых ботов в комментариях!

Источник: www.pvsm.ru

Как создать Telegram-бота для мониторинга погоды на Python

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

Введение

Всем привет! Меня зовут Максим Плачковский, я автор канала PythonToday. Из этой статьи вы узнаете, как написать своего Telegram-бота для получения данных о погоде в любом городе нашей планеты. Мы детально рассмотрим работу с API, парсинг JSON и напишем бота на асинхронной библиотеке aiogram. А после — загрузим его на виртуальный сервер и запустим.

Подготовка API и рабочего окружения

Перед написанием кода нужно получить API-токены для работы с сервисом OpenWeather и Telegram-ботом, а также подготовить рабочее окружение.

Получаем токен OpenWeather

Начнем с самого простого: зарегистрируемся на официальном сайте и в разделе My API keys создадим токен.

После того, как вы создали API-ключ, дайте ему немного «отлежаться» — обычно это занимает 10-15 минут. Спустя это время можно общаться с OpenWeather с помощью сгенерированного токена.

Генерируем токен для Telegram-бота

Импортируем необходимые библиотеки

Для работы нам понадобятся модули requests и aiogram — установим их.

pip install requests aiogram

После импортируем модули и классы в файл нашего пет-проекта.

import os import datetime import requests from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor bot = Bot(token=’your_bot_token’) dp = Dispatcher(bot)

Создание бота

Первое сообщение

Для начала проверим, что aiogram увидел бота и мы можем с ним взаимодействовать. Создадим простую асинхронную функцию start_command для ответа на команду /start . И добавляем метод start_polling для запуска бота.

Запускаем скрипт, заходим в Telegram и пишем команду /start — все работает: бот возвращает нужное сообщение.

Обрабатываем входные данные

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

OpenWeather должен принимать название города через API и возвращать данные о погоде. Исходя из документации, кроме названия города запрос должен содержать API-токен.

Усовершенствуем запрос: в параметр q будем передавать город, добавим параметр lang=ru , чтобы API работал с кириллицей. А также используем units=metric для установки метрической системы:

http://api.openweathermap.org/data/2.5/weather?q=москваunits=metricname»] cur_temp = data[«main»][«temp»] humidity = data[«main»][«humidity»] pressure = data[«main»][«pressure»] wind = data[«wind»][«speed»]

OpenWeather возвращает время рассвета и заката в формате unix timestamp. Извлечем эти данные и преобразуем в секунды.

Еще по теме:  Самые крутые Телеграмм каналы

# получаем время рассвета и преобразуем его в читабельный формат sunrise_timestamp = datetime.datetime.fromtimestamp(data[«sys»][«sunrise»]) # то же самое проделаем со временем заката sunset_timestamp = datetime.datetime.fromtimestamp(data[«sys»][«sunset»])

Зная время рассвета и заката, мы можем вернуть пользователю продолжительность дня. В результате получается следующее:

Декорируем сообщения

Разнообразим текст сообщений — будем выводить разные эмодзи в зависимости от погоды.

У словаря, который мы ранее спарсили, есть ключ main — он хранит описание погоды. На его основе мы можем создать свою коллекцию с эмодзи под разные ситуации.

code_to_smile =

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

# получаем значение погоды weather_description = data[«weather»][0][«main»] if weather_description in code_to_smile: wd = code_to_smile[weather_description] else: # если эмодзи для погоды нет, выводим другое сообщение wd = «Посмотри в окно, я не понимаю, что там за погода. »

Возвращаем данные пользователю

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

Главное — учесть формат данных. Например, OpenWeather возвращает значение давления в гектопаскалях. Так, если вы хотите отдавать пользователю данные в миллиметрах ртутного столба, значение нужно разделить на 1.33 и округлить в большую сторону.

await message.reply(f»»n f»Погода в городе: nТемпература: °C n» f»Влажность: %nДавление: мм.рт.стnВетер: м/с n» f»Восход солнца: nЗакат солнца: nПродолжительность дня: n» f»Хорошего дня!» )

Супер — бот работает и возвращает данные в удобочитаемом формате!

Деплой бота

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

Облачные серверы с гибкой производительностью ядра vCPU

Бота лучше перенести в облако. Поскольку затраты процессора на работу с простым Open Weather API минимальны, будет достаточно виртуального сервера с 1 vCPU и 1 ГБ оперативной памяти. С учетом выделенного IP-адреса такая конфигурация выйдет примерно в 30 ₽/день.

Для начала зарегистрируемся в панели управления и создадим новый сервер в разделе Облачная платформа. Затем настроим его.

Далее подключимся к серверу по SSH, создадим виртуальное окружение для бота и загрузим его удобным способом.

Последним шагом нужно создать .service-файл, который будет автоматически поднимать бота в случае перезагрузки сервера.

Запускаем командой: systemctl enable tg_bot.service

Проверяем статус: systemctl status tg_bot.service

И перезапускаем .service-файл: systemctl restart tg_bot.service

Все готово: бот стабильно работает на сервере и автоматически поднимается в случае перезагрузки.

Заключение

Следуя инструкции, каждый может создать бота для мониторинга погоды. А использование виртуальной машины из линейки Shared Line позволит избежать капитальных затрат. Платите только за потребленные ботом мощности по модели pay-as-you-go, а также экономьте на неполной загрузке ядра.

Зарегистрируйтесь в панели управления

И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.

Инструкция

Создаем блог на Django с опросами и тестами. Краткая инструкция. Часть 2

Инструкция

Установка Windows 11 на VMware: пошаговая инструкция

Инструкция

Как настроить PostHog для анализа продуктовой статистики

Источник: selectel.ru

Рейтинг
( Пока оценок нет )
Загрузка ...