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
2023-05-11 в 12:55, admin , рубрики: Блог компании Selectel
Хабровчане, всем привет! Меня зовут Максим Плачковский, я автор канала PythonToday. Из этой статьи вы узнаете, как написать своего Telegram-бота для получения данных о погоде в любом городе нашей планеты. Мы детально рассмотрим работу с API, парсинг JSON и напишем бота на асинхронной библиотеке aiogram. А после — загрузим его на виртуальный сервер и запустим.
Если интересно, добро пожаловать под кат!
Подготовка API и рабочего окружения
Перед написанием кода нужно получить API-токены для работы с сервисом OpenWeather и Telegram-ботом, а также подготовить рабочее окружение.
Получаем токен OpenWeather
Начнем с самого простого: зарегистрируемся на официальном сайте и в разделе My API keys создадим токен.
После того, как вы создали API-ключ, дайте ему немного «отлежаться» — обычно это занимает 10-15 минут. Спустя это время можно общаться с OpenWeather с помощью сгенерированного токена.
Telegram bot на Python + aiogram | Прогноз погоды в любом городе | API погоды | Парсинг JSON
Генерируем токен для 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»Хорошего дня!» )
Супер — бот работает и возвращает данные в удобочитаемом формате!
Деплой бота
Сейчас синоптик запущен на компьютере. Это неудобно, если вы хотите общаться с ним круглосуточно. Ведь тогда нужно поддерживать бесперебойную работу компьютера и постоянное соединение с интернетом.
Бота лучше перенести в облако. Поскольку затраты процессора на работу с простым 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
Все готово: бот стабильно работает на сервере и автоматически поднимается в случае перезагрузки.
Как мы видим, в разработке подобных 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