MsAnastasiia
@MsAnastasiia
Девочка.

Как исправить ошибку в python скрипте Яндекс API?

Ошибка:
line 23, in <module>
    weather = response.json()['fact']['prec_type']
              ~~~~~~~~~~~~~~~^^^^^^^^
KeyError: 'fact'


Код
import requests
import time
import telebot

# Указываем токен бота телеграм и чат-ид
bot_token = 'YOUR_BOT_TOKEN'
chat_id = 'YOUR_CHAT_ID'

# Инициализируем библиотеку для работы с телеграм ботом
bot = telebot.TeleBot(bot_token)

# Задаем начальные значения погоды и состояния
current_weather = None
current_state = None

# Бесконечный цикл проверки погоды
while True:
    # Запрос погоды через Яндекс API
    response = requests.get('https://api.weather.yandex.ru/v2/informers?lat=59.992330&lon=32.033880&lang=ru_RU',
                            headers={'X-Yandex-API-Key': 'YOUR_API_KEY'})
    
    # Получаем данные о погоде и состоянии
    weather = response.json()['fact']['prec_type']
    state = response.json()['fact']['condition']
    
    # Если погода на данный момент дождливая или грозовая и предыдущее значение было другим, то отправляем сообщение в телеграм
    if (weather == 'rain' or state == 'thunderstorm') and current_weather != 'rain' and current_state != 'thunderstorm':
        bot.send_message(chat_id, 'Сейчас ' + state + ' и идет дождь/гроза!')
    # Если погода изменилась и текущее значение тоже было дождливым или грозовым, то отправляем сообщение о смене погоды
    elif (weather != current_weather or state != current_state) and (current_weather == 'rain' or current_state == 'thunderstorm'):
        bot.send_message(chat_id, 'Сейчас ' + state + ' и уже не идет дождь/гроза!')
    
    # Обновляем текущее значение погоды и состояния
    current_weather = weather
    current_state = state
    
    # Ждем 30 минут перед следующей проверкой погоды
    time.sleep(1800)
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
В response.json() нет ключа fact
смотрите что вам возвращается в response
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы