PyTelegramBotApi как получить погоду с конкретного (заданного пользователем) города. Что писать после if call.data == 'Another сity'?

Relictum

Новичок
Автор темы
1
0
Python:
import telebot

from telebot import *

from pyowm import OWM

import pyowm

from pyowm.utils.config import get_default_config





#Токен от BotFather

PanOpt = telebot.TeleBot('Токен')



#Приветственное сообщение (/start)

@PanOpt.message_handler(commands=["start"])

def start(message, res = False):

    # Добавление клавиатуры

    keyboard = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True)

    Sayhi = types.KeyboardButton('Привет!')

    Weather = types.KeyboardButton('Погода')

    Antivirus = types.KeyboardButton('Антивирус')

    keyboard.add(Sayhi,Weather,Antivirus)



    # Приветственное сообщение (/start)

    PanOpt.send_message(message.chat.id, 'Кажется, контакт стабилен, чем я могу быть полезен?',

    reply_markup = keyboard)

# Ответ пользователю на встроенные кнопки



@PanOpt.message_handler(content_types=["text"])

def answer_user(message):



    if message.text == 'Привет!':

        keyboard = types.InlineKeyboardMarkup(row_width=2)

        Yesbutton = types.InlineKeyboardButton('Да',callback_data ='Yes')

        Nobutton = types.InlineKeyboardButton('Нет',callback_data ='No')

        keyboard.add(Yesbutton,Nobutton)



        PanOpt.send_message(message.chat.id, 'Привет, землянин! Моё имя - ПанОптикум.\nЯ - бот, созданный упростить выполнение твоих земных задач!\nХочешь узнать что я умею?',

        reply_markup = keyboard)



        @PanOpt.callback_query_handler(func = lambda c: c.data == 'Yes' or c.data == 'No')

        def more_information (call):

            if call.data == 'Yes':

                PanOpt.send_message(call.message.chat.id, 'Хоть я и прилетел на землю недавно, местные обитатели уже успели меня кое-чему научить:\n1)Предсказывать погоду\n2)Проверять файлы на вирусы')

            if call.data == 'No':

                PanOpt.send_message(call.message.chat.id, 'Надеюсь, ты сам разберёшься.\nВ любом случае - ещё заглядывай')





    if message.text == 'Погода':

        weather_keyboard = types.InlineKeyboardMarkup(row_width=1)

        btn_yes = types.InlineKeyboardButton('Да', callback_data = 'Samara')

        btn_no = types.InlineKeyboardButton('Другой город', callback_data= 'Another city')

        weather_keyboard.add(btn_yes,btn_no)



        config_dict = get_default_config()

        config_dict['language'] = 'ru'



        owm = OWM('Токен', config_dict) # Токен OpenWeatherMap



        PanOpt.send_message(message.chat.id,'О, это я люблю!''\n'

        'Когда-то я работал синоптиком у себя на планете, и могу сказать, довольно точно предсказывал погоду' '\n'

        'Вы живёте в Самаре?', reply_markup = weather_keyboard)

        @PanOpt.callback_query_handler(func = lambda c: c.data == 'Samara' or c.data == 'Another city')

        def weather(call):

            if call.data == 'Samara':

                place = 'Самара'

                mgr = owm.weather_manager()

                observation = mgr.weather_at_place(place)

                w = observation.weather



                t = w.temperature("celsius")

                t1 = t['temp']

                t2 = t['feels_like']

                t3 = t['temp_max']

                t4 = t['temp_min']



                wi = w.wind()['speed']

                humi = w.humidity

                cl = w.clouds

                st = w.status

                dt = w.detailed_status

                ti = w.reference_time('iso')

                pr = w.pressure['press']

                vd = w.visibility_distance



                PanOpt.send_message(call.message.chat.id, 'Погода в Самаре:''\n'

                '\n'

                + 'Температура в данный момент: ' + str (t1) + '°C' '\n'

                + 'Максимальная температура: ' + str (t3) + '°C' '\n'

                + 'Минимальная температура: ' + str (t4) + '°C' '\n'

                + 'Ощущается как: ' + str (t2) + '°C' '\n'

                + '\n'

                + 'Скорость ветра: ' + str (wi) + ' м/с' '\n'

                + 'Влажность: ' + str (humi) + ' мм.рт.ст' '\n'

                + 'Статус: ' + str (dt))











            if call.data == 'Another city':

                PanOpt.send_message(message.chat.id, 'Введите нужный город:')













PanOpt.polling(none_stop = True)
 

Вложения

  • bot.py
    4.9 KB · Просмотры: 10
Последнее редактирование модератором:

aluxx

Новичок
6
3
Тебе надо было изначально писать код под ввод строки, но тем не менее

Я не уверен, возможны ошибки, но по идее, этот код должен работать

Python:
import pyowm
import telebot

from telebot import *
from pyowm import OWM

from pyowm.utils.config import get_default_config

#Токен от BotFather 
PanOpt = telebot.TeleBot('токен')
    
#Приветственное сообщение (/start)
@PanOpt.message_handler(commands=["start"])

def start(message, res = False):
    # Добавление клавиатуры
    keyboard = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True)
    Sayhi = types.KeyboardButton('Привет!')
    Weather = types.KeyboardButton('Погода')
    Antivirus = types.KeyboardButton('Антивирус')
    keyboard.add(Sayhi,Weather,Antivirus)
    
    # Приветственное сообщение (/start)
    PanOpt.send_message(message.chat.id, 'Кажется, контакт стабилен, чем я могу быть полезен?', 
    reply_markup = keyboard)

# Ответ пользователю на встроенные кнопки

@PanOpt.message_handler(content_types=["text"])
def answer_user(message):
    if message.text == 'Привет!':
        keyboard = types.InlineKeyboardMarkup(row_width=2)
        Yesbutton = types.InlineKeyboardButton('Да',callback_data ='Yes')
        Nobutton = types.InlineKeyboardButton('Нет',callback_data ='No')
        keyboard.add(Yesbutton,Nobutton)

        PanOpt.send_message(message.chat.id, 'Привет, землянин! Моё имя - ПанОптикум.\nЯ - бот, созданный упростить выполнение твоих земных задач!\nХочешь узнать что я умею?',
        reply_markup = keyboard)

        @PanOpt.callback_query_handler(func = lambda c: c.data == 'Yes' or c.data == 'No')
        def more_information (call):
            if call.data == 'Yes':
                PanOpt.send_message(call.message.chat.id, 'Хоть я и прилетел на землю недавно, местные обитатели уже успели меня кое-чему научить:\n1)Предсказывать погоду\n2)Проверять файлы на вирусы')
            if call.data == 'No':
                PanOpt.send_message(call.message.chat.id, 'Надеюсь, ты сам разберёшься.\nВ любом случае - ещё заглядывай')
            
    if message.text == 'Погода':
        weather_keyboard = types.InlineKeyboardMarkup(row_width=1)
        btn_yes = types.InlineKeyboardButton('Да', callback_data = 'Samara')
        btn_no = types.InlineKeyboardButton('Другой город', callback_data= 'Another city')
        weather_keyboard.add(btn_yes,btn_no)

        config_dict = get_default_config()
        config_dict['language'] = 'ru'

        owm = OWM('токен', config_dict) # Токен OpenWeatherMap

        PanOpt.send_message(message.chat.id,'О, это я люблю!''\n'
        'Когда-то я работал синоптиком у себя на планете, и могу сказать, довольно точно предсказывал погоду' '\n'
        'Вы живёте в Самаре?', reply_markup = weather_keyboard)

        @PanOpt.callback_query_handler(func = lambda c: c.data == 'Samara' or c.data == 'Another city')
        def weather(call):
            if call.data == 'Samara':
                place = 'Самара'
                mgr = owm.weather_manager()
                observation = mgr.weather_at_place(place)
                w = observation.weather

                t = w.temperature("celsius")
                t1 = t['temp']
                t2 = t['feels_like']
                t3 = t['temp_max']
                t4 = t['temp_min']

                wi = w.wind()['speed']
                humi = w.humidity
                cl = w.clouds
                st = w.status
                dt = w.detailed_status
                ti = w.reference_time('iso')
                pr = w.pressure['press']
                vd = w.visibility_distance

                PanOpt.send_message(call.message.chat.id, 'Погода в Самаре:''\n'
                '\n'
                + 'Температура в данный момент: ' + str (t1) + '°C' '\n'
                + 'Максимальная температура: ' + str (t3) + '°C' '\n'
                + 'Минимальная температура: ' + str (t4) + '°C' '\n'
                + 'Ощущается как: ' + str (t2) + '°C' '\n'
                + '\n'
                + 'Скорость ветра: ' + str (wi) + ' м/с' '\n'
                + 'Влажность: ' + str (humi) + ' мм.рт.ст' '\n'
                + 'Статус: ' + str (dt))
            
            if call.data == 'Another city':
                PanOpt.send_message(message.chat.id, 'Введите нужный город:')
                
    else:
        config_dict = get_default_config()
        config_dict['language'] = 'ru'

        owm = OWM('токен', config_dict) # Токен OpenWeatherMap
        
        iMessage = message.text.lower()
        iMessage = iMessage.replace(iMessage[0], iMessage[0].upper())
                
        wManager = owm.weather_manager()
        wObservation = wManager.weather_at_place(iMessage)
        oWeather = wObservation.weather
                
        t = oWeather.temperature("celsius")
        t1 = t['temp']
        t2 = t['feels_like']
        t3 = t['temp_max']
        t4 = t['temp_min']

        wi = oWeather.wind()['speed']
        humi = oWeather.humidity
        cl = oWeather.clouds
        st = oWeather.status
        dt = oWeather.detailed_status
        ti = oWeather.reference_time('iso')
        pr = oWeather.pressure['press']
        vd = oWeather.visibility_distance

        PanOpt.send_message(call.message.chat.id, 'Погода в '+iMessage+':''\n'
        '\n'
        + 'Температура в данный момент: ' + str (t1) + '°C' '\n'
        + 'Максимальная температура: ' + str (t3) + '°C' '\n'
        + 'Минимальная температура: ' + str (t4) + '°C' '\n'
        + 'Ощущается как: ' + str (t2) + '°C' '\n'
        + '\n'
        + 'Скорость ветра: ' + str (wi) + ' м/с' '\n'
        + 'Влажность: ' + str (humi) + ' мм.рт.ст' '\n'
        + 'Статус: ' + str (dt))
   
PanOpt.polling(none_stop = True)