KTB-13 Отправить запрос с параметрами и распарсить ответ¶
📝 Описание¶
Настройка непрерывного получения обновлений
Требуется настроить непрерывное получение обновлений (апдейтов) от сервера Telegram и сформировать параметризованный HTTP-запрос. Это позволит приложению постоянно получать новые сообщения и реагировать на них в режиме реального времени.
// видео
Базовый парсинг JSON-ответа
Для обработки полученных данных необходимо выполнить базовый парсинг строки.
Парсинг JSON — это процесс преобразования текста в формате JSON в объекты или структуры данных, которые можно использовать в коде. На данном этапе, для демонстрации процесса, будет использоваться метод поиска необходимых данных по индексам конкретных символов в строке. В дальнейшем планируется применять специальные библиотеки для сериализации и десериализации JSON.
// видео
🗒 Задание¶
- Реализовать HTTP-запрос с параметром
offset. Это позволит получать обновления, начиная с определённого идентификатора, и предотвратит получение уже обработанных сообщений. - Распарсить ответ сервера с помощью определения индексов.
❌ Ошибки¶
Тут редко совершают ошибки, большая часть из невнимательности. Просто сравниваем с кодом в примере.
✏️ Комментарии¶
⌨️ Решение¶
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
fun main(args: Array<String>) {
val botToken = args[0]
var updateId = 0
while (true) {
Thread.sleep(2000)
val updates = getUpdates(botToken, updateId)
println(updates)
val startUpdateId = updates.lastIndexOf("update_id")
val endUpdateId = updates.lastIndexOf(",\n\"message\"")
if (startUpdateId == -1 || endUpdateId == -1) continue
println(updates.substring(startUpdateId, endUpdateId))
val updateIdString = updates.substring(startUpdateId + 11, endUpdateId)
updateId = updateIdString.toInt() + 1
}
}
fun getUpdates(botToken: String, updateId: Int): String {
val urlGetUpdates = "https://api.telegram.org/bot$botToken/getUpdates?offset=$updateId"
val client: HttpClient = HttpClient.newHttpClient()
val httpRequest: HttpRequest = HttpRequest.newBuilder().uri(URI.create(urlGetUpdates)).build()
val response: HttpResponse<String> = client.send(httpRequest, HttpResponse.BodyHandlers.ofString())
return response.body()
}