Автоматизация поиска телефонов горячих линий воинских частей на Java

Бесплатная консультация юриста

+7 (800) 302-87-29

Реклама jurik.ru

В современном мире информация о контактных данных воинских частей часто публикуется на официальных сайтах министерства обороны‚ региональных администраций и специализированных порталов. Чтобы быстро получить нужный номер «горячей линии»‚ можно написать небольшое приложение на языке Java‚ которое будет автоматически скачивать веб‑страницы‚ извлекать телефонные номера и выводить их пользователю.

Почему полезно автоматизировать поиск?

  • Скорость – программа обрабатывает десятки страниц за секунды.
  • Точность – регулярные выражения позволяют извлекать номера в нужном формате.
  • Повторное использование – один и тот же код можно запускать для разных регионов или частей.
  • Обновляемость – при изменении структуры сайта достаточно поправить парсер.

Этапы работы программы

  1. Определение источников информации (URL‑адреса официальных сайтов‚ где публикуются телефоны горячих линий).
  2. Парсинг полученного HTML и извлечение телефонных номеров.
  3. Фильтрация и вывод результатов в удобном виде (консоль‚ файл‚ GUI).
  4. Обработка возможных ошибок (сетевые сбои‚ изменение разметки).

Выбор библиотек

Для решения задачи удобно использовать следующие готовые библиотеки:

  • Apache HttpClient (или встроенный java.net.http.HttpClient начиная с Java 11) – для выполнения GET‑запросов.
  • SLF4J + Logback – для логирования работы программы.
  • Пример кода на Java 17

    Ниже представлен минимальный рабочий пример‚ который:

    • Скачивает страницу с перечнем горячих линий Восточного военного округа (пример взят из открытых источников).
    • Извлекает все телефонные номера в формате +7 (XXX) XXX-XX-XX или 8-XXX-XXX-XX-XX.
    • import org.jsoup.Jsoup;
      import org.jsoup.nodes.Document;
      import org.jsoup.nodes.Element;
      import org.jsoup.select.Elements;
      
      import java.io.IOException;
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      
      public class HotlineFinder {
      
       // Регулярное выражение для российских телефонных номеров
       private static final Pattern PHONE_PATTERN = Pattern.compile(
       "(?:\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}"
       );
      
       public static void main(String[] args) {
       String url = "https://mszn27.ru/node/114502"; // пример страницы с телефонами
      
       try {
       Document doc = Jsoup.connect(url)
       .userAgent("Mozilla/5.0 (compatible; HotlineFinder/1.0)")
       .timeout(10000)
       .get;
      
       // Получаем весь текст страницы (можно уточнить селектор‚ если известен блок с данными)
       String pageText = doc.text;
      
       Matcher matcher = PHONE_PATTERN.matcher(pageText);
       System.out.println("Найденные номера горячих линий на странице " + url + ":");
       while (matcher.find) {
       String raw = matcher.group;
       // Приводим к единому виду для удобства чтения
       String formatted = formatPhone(raw);
       System.out.println("- " + formatted);
       }
      
       } catch (IOException e) {
       System.err.println("Не удалось загрузить страницу: " + e.getMessage);
       }
       }
       /*
        Приводит найденную строку к виду +7 (XXX) XXX-XX-XX.
       */
       private static String formatPhone(String raw) {
       // Убираем все нецифровые символы
       String digits = raw.replaceAll("[^0-9]"‚ "");
       // Ожидаем 11 цифр (8 или +7 + 10 цифр номера)
       if (digits.length == 11 && digits.startsWith("8")) {
       digits = "7" + digits.substring(1); // заменяем ведущую 8 на 7
       }
       if (digits.length != 11) {
       return raw; // если формат неожиданный – возвращаем как есть
       } return String.format("+7 (%s) %s-%s-%s"‚
       digits.substring(1‚ 4)‚
       digits.substring(4‚ 7)‚
       digits.substring(7‚ 9)‚
       digits.substring(9‚ 11));
       }
      }
      

      Пояснения к коду

      1. Jsoup.connect(url) – выполняет GET‑запрос и возвращает объект Document.
      2. Мы задаём пользовательский агент‚ чтобы сайт не блокировал запрос как подозрительный.
      3. doc.text возвращает чистый текст страницы‚ из которого удобно извлекать номера регулярным выражением.
      4. Регулярное выражение PHONE_PATTERN ловит варианты записей: +7 (XXX) XXX-XX-XX‚ 8-XXX-XXX-XX-XX и т.п.
      5. Метод formatPhone приводит найденную строку к единому виду для удобного чтения.
      6. Обработка исключений IOException позволяет увидеть проблемы с сетью или недоступностью сайта.

      Как адаптировать под другие источники

      Если нужные телефоны находятся в конкретном блоке страницы (например‚ в таблице <table class="phones">)‚ то вместо получения всего текста можно использовать CSS‑селекторы:

      Elements phoneElements = doc.select("table.phones td");
      for (Element el : phoneElements) {
       String text = el.text;
       // дальше применяем тот же matcher к text
      }
      

      Таким образом‚ достаточно изменить селектор под структуру целевого сайта.

      Этические и правовые рекомендации

      • Используйте полученные данные только для законных целей (например‚ для связи с воинской частью в случае необходимости).
      • Не превышайте допустимую частоту запросов – добавьте задержку (Thread.sleep) между обращениями к одному и тому же сайту‚ чтобы не создавать нагрузку на их серверы.
      • Уважайте robots.txt и политику использования данных конкретного ресурса.
      • При хранении или дальнейшей обработке персональных данных соблюдайте требования Федерального закона «О персональных данных».

      Автоматизация поиска горячих линий воинских частей с помощью Java – это простой и эффективный способ быстро получить актуальную контактную информацию. Используя библиотеки Jsoup и HttpClient‚ вы можете создать гибкий инструмент‚ который будет работать с любыми официальными источниками‚ обновляться при изменении их структуры и экономить ваше время.

      Если вам понадобится расширить функционал (например‚ сохранять результаты в базу данных‚ отправлять уведомления или строить интерфейс на JavaFX/Swing)‚ базовый код‚ представленный выше‚ послужит надёжной отправной точкой.


      Статья подготовлена . Все примеры кода носят illustrative характер и могут требовать доработки под конкретные сайты и задачи.