Что такое API и как взять данные

Твой бот знает только то, что ты в него вписал. Погоду, новости, курс валют он сам не узнает, ведь они меняются каждый час. Сегодня научим бота ходить за свежими данными в интернет. Соберём Бот-Погоду, который приносит реальную температуру прямо сейчас. И никакого искусственного интеллекта, обычный запрос к сервису.

После урока сможешь: объяснить тему «Что такое 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&current=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 приходит реальная температура;
✅ координаты заменены на свой город.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева