определения страны по телефонному номеру
Нужна помощь, ибо не представляю что и как делать дальше. Есть задача: Написать микросервис для определения страны по телефонному номеру. Пользователь вводит номер телефона, система валидирует его и показывает страну или сообщение об ошибке. Для кодов стран воспользуйтесь таблицей на странице https://en.wikipedia.org/wiki/List_of_country_calling_codes, необходимо загружать из неё данные каждый раз при запуске сервиса.
Нефункциональные требования:
Backend : Java 8+ Spring Boot Maven/Gradle HTTP, RESTful сервис с JSON-форматом данных.
Frontend : HTML JavaScript CSS
Вспомогательные библиотеки - на Ваше усмотрение, однако нельзя использовать те, которые являются решением задачи (например, Google Phone Validator и т.д.) Нашёл код, который вытягивает таблицу из страницы
Document document = Jsoup.connect("https://en.wikipedia.org/wiki/List_of_country_calling_codes").get();
Element table = document.select("table.wikitable").get(1);
Elements body = table.select("tbody");
Elements rows = body.select("tr");
for(Element row: rows){
System.out.println(row.select("th").text());
System.out.println(row.select("td").text());
В консоль выводится в таком виде:
Country, Territory or Service Code Time Zone DST
Afghanistan +93 UTC+04:30
Åland Islands +358 18 UTC+02:00 UTC+03:00
Albania +355 UTC+01:00 UTC+02:00
Algeria +213 UTC+01:00
Годится ли это для выполнения? И как эти строки сравнить с вводимым кодом от юзера? Как вывести соответствующую страну (в смысле, её из этой же строки брать или опять из таблицы)? В общем, не представляю что делать. Любая помощь пожалуйста.
Ответы (1 шт):
При считывании таблицы Вы можете закешировать данные куда-то, например, в java.util.Map и при валидации данных от пользователя проверять код.
package com.somepackage;
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.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
Document document =
Jsoup.connect(
"https://en.wikipedia.org/wiki/List_of_country_calling_codes").get();
Element table = document.select("table.wikitable").get(1);
Elements body = table.select("tbody");
Elements rows = body.select("tr");
Map<String, String> codes =
new HashMap<>();
for (Element row : rows) {
Elements columns = row.select("td");
if (columns.size() > 2) {
String name = columns.get(0).text();
String code = columns.get(1).text();
codes.put(name, code);
}
}
codes.forEach((n,c) -> System.out.println(n + " -> " + c));
}
}