Отправка сообщения в телеграм на Java
Появилась тут задача:
Требуется создать программу для Windows, которая будет скрапить веб-сайт (www.asianbetsoccer.com/it/livescore.html), получать данные каждые 15 минут, а при возникновении некоторых условий отправлять сигнал по телеграмм-каналу. Может быть написана на любом языке (Java, Js, Python).
Скрапить (парсить) сайт можно на любом из выбранных языков. А вот потом отправлять сообщение боту удобнее всего на Java. Точнее, мне удобнее всего было сделать полностью программу на Java. Если разбить её на составляющие, то получим следующий список подзадач:
- Получение страницы
- Распарсивание её
- Сравнение данных и сохранение их
- Отправка сообщения в телеграм
- Повторение цикла с выбранной периодичностью
Создавать бота мы научились вот здесь. А вот код для отправки сообщения:
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class Main { private static HttpURLConnection con; private static String tgToken = "ваш_токен_телеграм"; private static int chatId = ид_кому_отправить_сообщение; private static String urlToken = "https://api.telegram.org/bot"+tgToken+"/sendMessage"; public static void main(String[] args) throws IOException { //текст сообщения String txt = "Нужный параметр изменился!"; String urlParameters = "chat_id="+chatId+"&text="+txt; byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); try { URL url = new URL(urlToken); con = (HttpURLConnection) url.openConnection(); con.setDoOutput(true); con.setRequestMethod("POST"); con.setRequestProperty("User-Agent", "Java upread.ru client"); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { wr.write(postData); } StringBuilder content; try (BufferedReader br = new BufferedReader( new InputStreamReader(con.getInputStream()))) { String line; content = new StringBuilder(); while ((line = br.readLine()) != null) { content.append(line); content.append(System.lineSeparator()); } } System.out.println(content.toString()); } finally { con.disconnect(); } } }Как видите – все очень просто: данные кодируем и пишем в поток. Потом читаем ответ. В консоли:
мы видим ответ от телеграма – что все успешно, ид сообщения и прочую техническую информацию.
Обращу внимание на один момент. Почему я не выбрал JS или Python. Для JS бы потребовался браузер – создавать для него расширение, которое обновляет страницу раз в минуту. Здесь два подводных камня: при обновлении браузера расширение может отключиться и могут быть проблемы с отправкой POST запроса с локального компьютера на удаленный сервер – в связи с политикой безопасности для кросс-доменных запросов. Это решаемо, но займет лишнее время.
В случае с Python понадобилось бы устанавливать дополнительно ПО, разбираться с командной строкой и виртуальным окружением. По сравнению с установкой JRE (которая часто есть уже на компьютере) работа с Python-скриптами для начинающих несколько сложнее.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.