Перейти к содержанию

KTB-12 Получить токен телеграм-бота и выполнить базовые HTTP запросы

📝 Описание

Взаимодействие с Telegram API

Для реализации функциональности бота необходимо уметь формировать HTTP-запросы и обрабатывать ответы от сервера. HTTP (Hypertext Transfer Protocol) — это основной протокол передачи данных в интернете, который мы будем использовать для отправки запросов и получения ответов.

На данном этапе требуется зарегистрировать бота через BotFather в Telegram и получить уникальный токен доступа. После получения токена необходимо выполнить первые HTTP-запросы из консольного приложения. В ответ сервер Telegram предоставит данные в формате JSON, которые в дальнейшем потребуется десериализовать для обработки внутри приложения.

JSON (JavaScript Object Notation) — это формат обмена данными, широко используемый в веб-разработке. Он представляет собой текст в формате "ключ-значение", который легко читается и пишется как человеком, так и машиной.

// видео 1

Цель данного этапа — ознакомиться с концепцией получения обновлений от сервера Telegram и научиться разбирать JSON-ответы.

// видео 2

🗒 Задание

  1. Выполнить HTTP-запрос с методом getMe для получения информации о боте.
  2. Выполнить HTTP-запрос с методом getUpdates для получения списка обновлений.
  3. Обработать полученные ответы от сервера и вывести их содержимое в консоль.

❌ Ошибки

✏️ Комментарии

HttpClient может быть не найден в случае, если проект настроен на использование Java 8. В таком случае в корневом  `build.gradle.kts` требуется указать более свежую версию java, например 21. Иначе HttpClient не будет найден, так как был добавлен в стандартную библиотеку только в Java 11:

// ...

kotlin {
    jvmToolchain(21)
}

⌨️ Решение

fun main(args: Array<String>) {

    val botToken = args[0]

    val urlGetMe = "https://api.telegram.org/bot$botToken/getMe"
    val urlGetUpdates = "https://api.telegram.org/bot$botToken/getUpdates"

    val client: HttpClient = HttpClient.newBuilder().build()

    val httpRequestGetMe: HttpRequest = HttpRequest.newBuilder().uri(URI.create(urlGetMe)).build()
    val responseGetMe: HttpResponse<String> = client.send(httpRequestGetMe, HttpResponse.BodyHandlers.ofString())
    println(responseGetMe.body())

    val httpRequestGetUpdates: HttpRequest = HttpRequest.newBuilder().uri(URI.create(urlGetUpdates)).build()
    val responseGetUpdates: HttpResponse<String> = client.send(httpRequestGetUpdates, HttpResponse.BodyHandlers.ofString())
    println(responseGetUpdates.body())
}