код на python для бота телеграмм погода
Бот для Telegram на облачных функциях
Сервисов, предоставляющих информацию о погоде, достаточно много, вот только какому из них верить? Когда я стал часто ездить на велосипеде, мне захотелось обладать наиболее точной информацией о погодных условиях в том месте, где я катаюсь.
Первой мыслью было собрать небольшую DIY погодную станцию с датчиками и получать данные с нее. Но я не стал «изобретать велосипед» и в качестве источника проверенных данных выбрал погодную информацию, которая используется в гражданской авиации, а именно METAR (METeorological Aerodrome Report) и TAF (TAF — Terminal Aerodrome Forecast). В авиации от погоды зависят жизни сотен людей, поэтому прогнозы максимально точны.
Эта информация в круглосуточном режиме транслируется голосом на каждом современном аэродроме в виде ATIS (Automatic Terminal Information Service) и VOLMET (от франц. vol — полет и météo — погода). Первый предоставляет информацию о фактической погоде на аэродроме, а второй — прогноз на ближайшие 24-30 часов, причем не только на аэродроме трансляции, но и на других.
Каждый раз таскать с собой радиосканер или трансивер на соответствующий диапазон неудобно, и мне захотелось создать бота в Telegram, который по нажатию кнопки позволяет получить такой же прогноз. Выделять под это отдельный сервер как минимум нецелесообразно, равно как и гонять запросы на домашнюю Raspberry.
Поэтому в качестве бэкэнда я решил использовать сервис Облачные функции Selectel. Количество запросов будет ничтожно малое, поэтому такой сервис обойдется фактически бесплатно (по моим подсчетам выйдет 22 рубля за 100 000 запросов).
Подготовка бэкэнда
Создание функции
В панели управления my.selectel.ru открываем представление Облачная платформа и создаем новый проект:
После того как проект создан, переходим в раздел Функции:
Нажимаем кнопку Создать функцию и задаем ей нужное имя:
После нажатия Создать функцию у нас появится представление созданной функции:
Перед тем, как приступить к созданию кода на Python, потребуется создать бота в Telegram. Расписывать, как это делается, я не буду — детальная инструкция есть в нашей базе знаний. Главное для нас — токен созданного бота.
Готовим код
В качестве источника надежных данных я выбрал Национальное управление океанических и атмосферных исследований США (англ. National Oceanic and Atmospheric Administration, NOAA). Это научное агентство в реальном времени обновляет данные на своем сервере в формате TXT.
Ссылка для получения данных METAR:
Обратите внимание на регистр.
В моем случае ближайшим аэропортом является Внуково, его код по ICAO — UUWW. Переход на сформированный URL выдаст следующее:
Первая строка — время актуальности прогноза по Гринвичу. Вторая строка — сводка о фактической погоде. Пилоты гражданской авиации без проблем поймут, что означает эта строка, однако нам нужна расшифровка:
Приступаем к написанию программного кода. Для начала потребуется импортировать функции request и pytaf:
Указать переменные и подготовить функцию декодирования:
Регистр также важен.
Как и в предыдущем примере, посмотрим прогноз в аэропорту Внуково:
Особенно обратим внимание на строки TEMPO и BECMG. TEMPO означает то, что фактическая погода в указанный промежуток будет периодически меняться. BECMG — погода постепенно изменится в указанный промежуток времени.
Терминов, означающих погодные явления, достаточно много, и запомнить их сложновато. Код для запроса TAF пишется аналогичным образом.
Заливаем код в облако
Чтобы не тратить зря время, возьмем шаблон телеграм-бота из нашего репозитория cloud-telegram-bot. Там есть предварительно подготовленный requirements.txt и setup.py с корректной структурой директорий.
Поскольку в коде мы будем обращаться к модулю pytaf, то его версию следует сразу добавить в requirements.txt
Переходим к редактированию bot/tele_bot.py. Убираем все лишнее и дописываем наш код.
У нас появился URL для публичного вызова функции. Осталось лишь настроить вебхук. Найдите нашего бота @SelectelServerless_bot в Telegram и зарегистрируйте своего бота командой:
Результат
Если все сделано правильно, то ваш бот сразу начнет работать и отображать актуальную сводку авиационной погоды прямо в мессенджере.
Разумеется, код можно дорабатывать, однако даже в текущем состоянии его достаточно, чтобы узнать самую точную погоду и прогноз из проверенного источника.
Полную версию кода вы найдете в нашем репозитории на GitHub.
Солнечно, без осадков: как создать Telegram-бота для самого точного прогноза погоды
Вокруг много сервисов, предоставляющих информацию о погоде. Но не всем можно верить. Старший технический писатель Selectel Николай Рубанов создал бота, который делится информацией с погодных датчиков пилотов гражданской авиации. Там от этих показателей зависят жизни людей, поэтому прогнозы максимально точные.
Частые велопрогулки стали причиной моего интереса к прогнозам погоды. Сначала хотел собрать небольшую DIY погодную станцию с датчиками и получать с нее данные. Но не стал «изобретать велосипед». В качестве источника проверенных данных выбрал погодную информацию, которую используют в гражданской авиации, а именно METAR или METeorological Aerodrome Report и TAF или Terminal Aerodrome Forecast.
Эта информация в круглосуточном режиме транслируется голосом на каждом современном аэродроме в виде ATIS (Automatic Terminal Information Service) и VOLMET (от франц. vol — полет и météo — погода). Первый предоставляет информацию о фактической погоде на аэродроме, а второй — прогноз на ближайшие 24-30 часов, причем не только на аэродроме трансляции, но и на других.
Каждый раз брать с собой радиосканер или трансивер на соответствующий диапазон неудобно. Решил создать бота в Telegram, который по нажатию кнопки выдает такой же прогноз. Выделять под это отдельный сервер нецелесообразно, как и гонять запросы на домашнюю Raspberry.
Поэтому в качестве бэкэнда решил использовать сервис Облачные функции Selectel. Количество запросов будет ничтожно малое, поэтому такой сервис обойдется фактически бесплатно. По моим подсчетам выйдет 22 рубля за 100 тыс. запросов.
Самый точный прогноз погоды: бот для Telegram на облачных функциях
Сервисов, предоставляющих информацию о погоде, достаточно много, вот только какому из них верить? Когда я стал часто ездить на велосипеде, мне захотелось обладать наиболее точной информацией о погодных условиях в том месте, где я катаюсь.
Первой мыслью было собрать небольшую DIY погодную станцию с датчиками и получать данные с нее. Но я не стал «изобретать велосипед» и в качестве источника проверенных данных выбрал погодную информацию, которая используется в гражданской авиации, а именно METAR (METeorological Aerodrome Report) и TAF (TAF — Terminal Aerodrome Forecast). В авиации от погоды зависят жизни сотен людей, поэтому прогнозы максимально точны.
Эта информация в круглосуточном режиме транслируется голосом на каждом современном аэродроме в виде ATIS (Automatic Terminal Information Service) и VOLMET (от франц. vol — полет и météo — погода). Первый предоставляет информацию о фактической погоде на аэродроме, а второй — прогноз на ближайшие 24-30 часов, причем не только на аэродроме трансляции, но и на других.
Каждый раз таскать с собой радиосканнер или трансивер на соответствующий диапазон неудобно, и мне захотелось создать бота в Telegram, который по нажатию кнопки позволяет получить такой же прогноз. Выделять под это отдельный сервер как минимум нецелесообразно, равно как и гонять запросы на домашнюю Raspberry.
Поэтому в качестве бэкэнда я решил использовать сервис Облачные функции Selectel. Количество запросов будет ничтожно малое, поэтому такой сервис обойдется фактически бесплатно (по моим подсчетам выйдет 22 рубля за 100 000 запросов).
Подготовка бэкэнда
Создание функции
В панели управления my.selectel.ru открываем представление Облачная платформа и создаем новый проект:
После того как проект создан, переходим в раздел Функции:
Нажимаем кнопку Создать функцию и задаем ей нужное имя:
После нажатия Создать функцию у нас появится представление созданной функции:
Перед тем, как приступить к созданию кода на Python, потребуется создать бота в Telegram. Расписывать, как это делается, я не буду — детальная инструкция есть в нашей базе знаний. Главное для нас — токен созданного бота.
Готовим код
В качестве источника надежных данных я выбрал Национальное управление океанических и атмосферных исследований США (англ. National Oceanic and Atmospheric Administration, NOAA). Это научное агентство в реальном времени обновляет данные на своем сервере в формате TXT.
Ссылка для получения данных METAR (обратите внимание на регистр):
В моем случае ближайшим аэропортом является Внуково, его код по ICAO — UUWW. Переход на сформированный URL выдаст следующее:
Первая строка — время актуальности прогноза по Гринвичу. Вторая строка — сводка о фактической погоде. Пилоты гражданской авиации без проблем поймут, что означает эта строка, однако нам нужна расшифровка:
Указать переменные и подготовить функцию декодирования:
Перейдем к TAF (регистр также важен).
Как и в предыдущем примере, посмотрим прогноз в аэропорту Внуково:
Особенно обратим внимание на строки TEMPO и BECMG. TEMPO означает то, что фактическая погода в указанный промежуток будет периодически меняться. BECMG — погода постепенно изменится в указанный промежуток времени.
Заливаем код в облако
Чтобы не тратить зря время, возьмем шаблон телеграм-бота из нашего репозитория cloud-telegram-bot. Там есть предварительно подготовленный requirements.txt и setup.py с корректной структурой директорий.
Поскольку в коде мы будем обращаться к модулю pytaf, то его версию следует сразу добавить в requirements.txt
У нас появился URL для публичного вызова функции. Осталось лишь настроить вебхук. Найдите нашего бота @SelectelServerless_bot в Telegram и зарегистрируйте своего бота командой:
Результат
Если все сделано правильно, то ваш бот сразу начнет работать и отображать актуальную сводку авиационной погоды прямо в мессенджере.
Разумеется, код можно дорабатывать, однако даже в текущем состоянии его достаточно, чтобы узнать самую точную погоду и прогноз из проверенного источника.
Полную версию кода вы найдете в нашем репозитории на GitHub.
Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
После, в терминале Linux, или командной строке Windows вводим
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
Остаётся только дописать в начало файла одну строку:
Вот и всё, сохраняем и запускаем нашего бота:
Телеграм-бот погоды
Доброго времени суток, друзья. В общем сделал я бота и захотел, чтобы при слове привет от пользователя бот выдавал одну фразу, а при слове пока другую. Я всё это прописал, но вылазит ошибка якобы ресурс не найден. (Это если пишу пока) Если пишу привет, он выдаёт мою фразочку и погоду в городе привет(хз что это за город) У меня вопрос в том, как сделать так чтобы когда пишешь боту привет и пока он не искал инфу о погоде а просто писал тебе мои запрограммированные фразочки?
import random
import pyowm
import telebot
owm_ru = pyowm.OWM(‘6040159249e4cef8bc7f28a713e725f0′, language=’ru’)
bot = telebot.TeleBot(«1122122246:AAECsMx0G3i-h0SdGM4GbtUUcpvRXzJomuQ»)
@bot.message_handler(commands=[‘start’])
def start_message(message):
bot.send_message(message.chat.id, ‘Выбирай что хочешь узнать’, reply_markup=keyboard1)
@bot.message_handler(commands=[‘start’])
def start_message(message):
bot.send_message(message.chat.id, ‘Привет. Вводи город или страну для того, чтобы узнать погоду’)
weath = [‘На улице пипец, лучше сиди дома’,’Ну, и куда ты намылился в такую погоду?»’,’Доставай валенки, мы идём гулять’]
weath2 = [‘На улице норм, можешь выходить и особо не утепляться’,’Прохладно, надевай что-нибудь от ветра’,’Полёт нормальный, косуха в самый раз’]
weath3 = [‘На улице очень жарко, можешь выходить в трусах’,’Жарево, выходи в футболке’, ‘Солненчо и душно, как в Египте’]
@bot.message_handler(content_types=[‘text’])
def send_text1(message):
observation = owm_ru.weather_at_place(message.text)
w = observation.get_weather()
temp = w.get_temperature(‘celsius’)[«temp»]
answer = ‘ В городе / стране ‘ + message.text + ‘ сейчас ‘ + w.get_detailed_status() + «\n»
answer += ‘Температура составляет ‘ + str(temp) + «\n——————————————-\n»
Помощь в написании контрольных, курсовых и дипломных работ здесь.