Отправка сообщения в телеграм на Java


Появилась тут задача:

Требуется создать программу для Windows, которая будет скрапить веб-сайт (www.asianbetsoccer.com/it/livescore.html), получать данные каждые 15 минут, а при возникновении некоторых условий отправлять сигнал по телеграмм-каналу. Может быть написана на любом языке (Java, Js, Python).

Скрапить (парсить) сайт можно на любом из выбранных языков. А вот потом отправлять сообщение боту удобнее всего на Java. Точнее, мне удобнее всего было сделать полностью программу на Java. Если разбить её на составляющие, то получим следующий список подзадач:
  1. Получение страницы
  2. Распарсивание её
  3. Сравнение данных и сохранение их
  4. Отправка сообщения в телеграм
  5. Повторение цикла с выбранной периодичностью
По парсингу я написал уже несколько материалов (в том числе и на Java), а сегодня давайте разберем, как можно реализовать четвёртый пункт на языке java. Все становится проще, если понять, что бот отправляет сообщение вам, если вы ему передадите команду методом POST. То есть по сути нам надо научиться отправлять POST-запрос на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, java, парсинг, telegram




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



700 человек в день
Урок 9. Цикл For Each Java
Узнаем день рождения