Получить геолокацию по IP (Spigot 1.8 и 1.13.2) - PullRequest
1 голос
/ 04 июля 2019

i Хотите узнать геолокацию, указав только IP-адрес.Моя цель - сохранить город, страну, почтовый индекс и другую информацию.

CraftPlayer cp = (CraftPlayer)p;
String adress = cp.getAddress();

Любые короткие возможности, узнать только с помощью ip?

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Я рекомендую использовать http://ip -api.com / docs / api: newline_separated

Затем вы можете выбрать, какая информация вам нужна, и создать свою HTTP-ссылку, например:

http://ip -api.com / линия / 8.8.8.8? Поля = 49471

Результат в этом примере будет:

success
United States
US
VA
Virginia
Ashburn
20149
America/New_York

Таким образом, вы можете создать метод в Java для чтения HTTP и разделить его на \n, чтобы получить строки:

private void whatever(String ip) {
    String ipinfo = getHttp("http://ip-api.com/line/" + ip + "?fields=49471");
    if (ipinfo == null || !ipinfo.startsWith("success")) {
        // TODO: failed
        return;
    }
    String[] lines = ipinfo.split("\n");
    // TODO: now you can get the info
    String country = lines[1];
    /*
    ...
     */
}

private static String getHttp(String url) {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
        String line;
        StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line).append(System.lineSeparator());
        }
        br.close();
        return sb.toString();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

только убедитесь, что не создаете много запросов за короткое время, так как ip-api.com забанит вас за это.

0 голосов
/ 10 июля 2019

Существует множество веб-сайтов, которые предоставляют бесплатные базы данных для геолокации IP.

Примеры включают в себя:

При запуске плагина вы можете загрузить одну из этих баз данных, а затем выполнить локальный запрос во время выполнения.

Если вы решите скачать .bin формат, вам придется инициализировать локальную базу данных, а затем импортировать данные. В противном случае вы можете просто использовать файл csv с библиотекой Java, например opencsv .

Из документации opencsv:

Для чтения создайте bean-компонент для хранения информации, которую вы хотите прочитать, Аннотируйте поля компонентов с помощью аннотаций opencsv, затем сделайте следующее:

List<MyBean> beans = new CsvToBeanBuilder(FileReader("yourfile.csv"))
    .withType(Visitors.class).build().parse();

Ссылка на документацию: http://opencsv.sourceforge.net

...