L
L
Loper472019-10-31 18:24:48
Python
Loper47, 2019-10-31 18:24:48

Telegram weather bot question in Python?

How to make it so that when the open weather map does not find the desired city or the user enters some kind of abracadabra, the bot does not crash, but responds with the message 'City not found, try again'?

import pyowm
import telebot

owm=pyowm.OWM('token', language = 'ru')

bot = telebot.TeleBot('token')

@bot.message_handler(content_types=['text'])
def send_echo(message):
  observation = owm.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(round(temp)) + ' градусов' + '\n\n'

  if temp<10:
    answer += 'Очень холодно, оденься потеплее))'
  elif temp<17:
    answer += 'Прохладно, лучше оденься:)'
  else:
    answer += 'Не холодно, хоть в трусах иди:)'

  bot.send_message(message.chat.id, answer)

bot.polling(none_stop = True)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
B
Byxo Cyze, 2019-10-31
@Loper47

It is enough to add except ...

import pyowm
import telebot

# от блокировок
# from telebot import apihelper
# apihelper.proxy = {'https':'socks5://127.0.0.1:9050'}

owm=pyowm.OWM('df1....51', language = 'ru')

bot = telebot.TeleBot('106...ilQ')

@bot.message_handler(content_types=['text'])
def send_echo(message):
  try:
    observation = owm.weather_at_place(message.text)
    w = observation.get_weather()
    temp=w.get_temperature('celsius')['temp']

    answer = f"В городе {message.text} сейчас {w.get_detailed_status()} \n"
    answer += f"Температура в районе {round(temp)} градусов\n\n"

    if temp<10:
      answer += 'Очень холодно, оденься потеплее))'
    elif temp<17:
      answer += 'Прохладно, лучше оденься:)'
    else:
      answer += 'Не холодно, хоть в трусах иди:)'

    bot.send_message(message.chat.id, answer)
  except pyowm.exceptions.api_response_error.NotFoundError:
      bot.send_message(message.chat.id, 'Город не найден :(')
      

bot.polling(none_stop = True)

S
Sergey Kaplukh, 2020-12-02
@LT_BlackCrow

What if it gives an error "city not found"

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question