KTB-12 Получить токен телеграм-бота и выполнить базовые HTTP запросы¶
📝 Описание¶
Взаимодействие с Telegram API
Для реализации функциональности бота необходимо уметь формировать HTTP-запросы и обрабатывать ответы от сервера. HTTP (Hypertext Transfer Protocol) — это основной протокол передачи данных в интернете, который мы будем использовать для отправки запросов и получения ответов.
На данном этапе требуется зарегистрировать бота через BotFather в Telegram и получить уникальный токен доступа. После получения токена необходимо выполнить первые HTTP-запросы из консольного приложения. В ответ сервер Telegram предоставит данные в формате JSON, которые в дальнейшем потребуется десериализовать для обработки внутри приложения.
JSON (JavaScript Object Notation) — это формат обмена данными, широко используемый в веб-разработке. Он представляет собой текст в формате "ключ-значение", который легко читается и пишется как человеком, так и машиной.
// видео 1
Цель данного этапа — ознакомиться с концепцией получения обновлений от сервера Telegram и научиться разбирать JSON-ответы.
// видео 2
🗒 Задание¶
- Выполнить HTTP-запрос с методом
getMeдля получения информации о боте. - Выполнить HTTP-запрос с методом
getUpdatesдля получения списка обновлений. - Обработать полученные ответы от сервера и вывести их содержимое в консоль.
❌ Ошибки¶
✏️ Комментарии¶
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())
}