Твой бот знает только то, что ты в него вписал. Погоду, новости, курс валют он сам не узнает, ведь они меняются каждый час. Сегодня научим бота ходить за свежими данными в интернет. Соберём Бот-Погоду, который приносит реальную температуру прямо сейчас. И никакого искусственного интеллекта, обычный запрос к сервису.
После урока сможешь: объяснить тему «Что такое API и как взять данные» и выполнить связанный с ней учебный шаг без подсказки.
Вспомним про окошко
Помнишь аналогию из словаря? API это окошко выдачи. Ты говоришь в окошко, что хочешь, и тебе выдают готовый ответ, не пуская на кухню. В интернете полно таких окошек: сервисы, которые по запросу отдают данные. Есть окошко с погодой, с шутками, с фактами о числах.
Мы возьмём бесплатное окошко с погодой. Оно отдаёт температуру по координатам, без регистрации и без всяких ключей. То что надо для учёбы.
Новый помощник: requests
Чтобы сходить к окошку, нужна библиотека requests. Поставь её, как ставил telebot:
pip install requests
Подключаем сверху: import requests. Теперь одна команда идёт по адресу в интернете и приносит ответ: response = requests.get("адрес_сервиса"). В response ляжет ответ сервиса.
Достаём температуру
Сервис отвечает данными в формате JSON, том самом, что мы сохраняли в файл в прошлом модуле. Превратим ответ в словарь и достанем нужное поле:
data = response.json()
temp = data["current"]["temperature_2m"]
response.json() превращает ответ в обычный словарь Python. Дальше достаём температуру по ключам. Сервис кладёт текущую погоду в раздел current, а температуру в поле temperature_2m. Откуда я это знаю? Посмотрел, что присылает сервис. Со своими окошками так же: открываешь ответ и смотришь, где что лежит.
Первый Бот-Погода
import telebot
import requests
from config import TOKEN
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['pogoda'])
def pogoda(message):
url = "https://api.open-meteo.com/v1/forecast?latitude=55.75&longitude=37.62¤t=temperature_2m"
response = requests.get(url)
data = response.json()
temp = data["current"]["temperature_2m"]
bot.send_message(message.chat.id, f"Сейчас в Москве {temp} градусов.")
bot.infinity_polling()
Длинный адрес в url это запрос к окошку. В нём зашиты координаты Москвы (latitude это широта, longitude это долгота) и просьба прислать текущую температуру. Поменяешь координаты, получишь погоду другого места.
Запусти, напиши /pogoda. Через секунду бот пришлёт настоящую температуру в Москве. Не выдуманную, а ту, что прямо сейчас за окном. Твой бот только что сходил в интернет и принёс живые данные.
Контрольный вопрос. Какой библиотекой бот ходит в интернет за данными (например, за погодой)? Напиши имя (как в pip install).
Подсказка: pip install ____; потом import ____
Онлайн-проверка ответа появится позже
Задание. Поставь requests и собери Бот-Погоду из урока. Напиши /pogoda и получи реальную температуру. Поменяй координаты на свой город (найти их легко: забей в поиске «координаты твой город»).
Подсказка: requests.get(url) приносит ответ, response.json() превращает в словарь, температура — data[«current»][«temperature_2m»].
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Зачёт, если:
✅ библиотека requests установлена, Бот-Погода из урока собран;
✅ на /pogoda приходит реальная температура;
✅ координаты заменены на свой город.
