diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e1b7ac8 --- /dev/null +++ b/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + org.example + machine-gos-number + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + + + org.jsoup + jsoup + 1.14.3 + + + com.fasterxml.jackson.core + jackson-databind + 2.17.2 + + + \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..33bedb9 --- /dev/null +++ b/readme.md @@ -0,0 +1,2 @@ +Программа генерирует все буквенные сочетания номера машин в заданном регионе. +Затем ищет марку машины по заданному номеру на сайте https://avtocod.ru \ No newline at end of file diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java new file mode 100644 index 0000000..2f1e91a --- /dev/null +++ b/src/main/java/org/example/Main.java @@ -0,0 +1,60 @@ +package org.example; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.jsoup.Jsoup; + +import java.util.ArrayList; +import java.util.List; + +public class Main { + public static void main(String[] args) throws InterruptedException { + List numberList = new ArrayList<>(); + String[] alphavit = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"}; + + for (int indexA = 0; indexA < 12; indexA++) { + for (int indexB = 0; indexB < 12; indexB++) { + for (int indexC = 0; indexC < 12; indexC++) { + String number = String.format("%s910%s%s40", alphavit[indexA], alphavit[indexB], alphavit[indexC]); + numberList.add(number); + } + } + } + ObjectMapper objectMapper = new ObjectMapper(); + System.out.println("all: " + numberList.size()); + for (int i = 1254; i < numberList.size(); i++) { + String regNumber = numberList.get(i); + + String model = getMachineModel(objectMapper, regNumber); + System.out.printf("%s,%s,%s\n", regNumber, "=ГИПЕРССЫЛКА(\"https://avtocod.ru/proverkaavto/" + regNumber + "\";\"" + regNumber + "\")", model); + } + } + + private static String getMachineModel(ObjectMapper objectMapper, String regNumber) { + String result = ""; + try { + var document = Jsoup.connect("https://avtocod.ru/proverkaavto/" + regNumber).timeout(10000) + .followRedirects(true) + .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") + .execute().parse(); + String dataText = document.getElementById("popMechanicUserData").getAllElements().getFirst().childNodes().getFirst().toString(); + String json = dataText.replace("window.PopMechanicUserData =", "").replace("};", "}") + .replace("\n", "").replace(" ", "").replace(",}", "}") + .replace("grz_num", "'grz_num'") + .replace("{_num", "{'_num'") + .replace("car_mark", "'car_mark'") + .replace("car_model", "'car_model'") + .replace("car_year", "'car_year'") + .replace("grz_region", "'grz_region'") + .replace("'", "\""); + JsonNode jsonNode = objectMapper.readTree(json); + String mark = jsonNode.get("car_mark").asText(); + String model = jsonNode.get("car_model").asText(); + String year = jsonNode.get("car_year").asText(); + result = String.format("%s %s %s г.", mark, model, year); + } catch (Exception e) { + // обработка ошибок парсинга + } + return result; + } +} \ No newline at end of file