В современном мире информация о контактных данных воинских частей часто публикуется на официальных сайтах министерства обороны‚ региональных администраций и специализированных порталов. Чтобы быстро получить нужный номер «горячей линии»‚ можно написать небольшое приложение на языке Java‚ которое будет автоматически скачивать веб‑страницы‚ извлекать телефонные номера и выводить их пользователю.
Почему полезно автоматизировать поиск?
- Скорость – программа обрабатывает десятки страниц за секунды.
- Точность – регулярные выражения позволяют извлекать номера в нужном формате.
- Повторное использование – один и тот же код можно запускать для разных регионов или частей.
- Обновляемость – при изменении структуры сайта достаточно поправить парсер.
Этапы работы программы
- Определение источников информации (URL‑адреса официальных сайтов‚ где публикуются телефоны горячих линий).
- Парсинг полученного HTML и извлечение телефонных номеров.
- Фильтрация и вывод результатов в удобном виде (консоль‚ файл‚ GUI).
- Обработка возможных ошибок (сетевые сбои‚ изменение разметки).
Выбор библиотек
Для решения задачи удобно использовать следующие готовые библиотеки:
- Apache HttpClient (или встроенный
java.net.http.HttpClientначиная с Java 11) – для выполнения GET‑запросов. - SLF4J + Logback – для логирования работы программы.
- Скачивает страницу с перечнем горячих линий Восточного военного округа (пример взят из открытых источников).
- Извлекает все телефонные номера в формате
+7 (XXX) XXX-XX-XXили8-XXX-XXX-XX-XX.
Пример кода на Java 17
Ниже представлен минимальный рабочий пример‚ который:
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));
}
}
Пояснения к коду
- Jsoup.connect(url) – выполняет GET‑запрос и возвращает объект
Document. - Мы задаём пользовательский агент‚ чтобы сайт не блокировал запрос как подозрительный.
doc.textвозвращает чистый текст страницы‚ из которого удобно извлекать номера регулярным выражением.- Регулярное выражение
PHONE_PATTERNловит варианты записей:+7 (XXX) XXX-XX-XX‚8-XXX-XXX-XX-XXи т.п. - Метод
formatPhoneприводит найденную строку к единому виду для удобного чтения. - Обработка исключений
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 характер и могут требовать доработки под конкретные сайты и задачи.