【问题标题】:Get Geolocation by IP (Spigot 1.8 & 1.13.2)通过 IP 获取地理位置(Spigot 1.8 和 1.13.2)
【发布时间】:2019-07-04 13:43:26
【问题描述】:

我只想通过提供 IP 地址来找出地理位置。 我的目标是保存城市、国家、邮政编码和其他信息。

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

任何简短的可能性,仅通过使用 ip 就可以找到?

【问题讨论】:

标签: java geolocation minecraft bukkit


【解决方案1】:

我推荐使用http://ip-api.com/docs/api:newline_separated

然后您可以选择您需要的信息并创建您的 HTTP 链接,例如:

http://ip-api.com/line/8.8.8.8?fields=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 会禁止您这样做。

【讨论】:

    【解决方案2】:

    有很多网站提供免费的 IP 地理定位数据库。

    示例包括:

    在插件启动时,您可以下载其中一个数据库,然后在运行时在本地查询它。

    如果您选择下载 .bin 格式,则必须初始化本地数据库,然后导入数据。否则,您可以将 csv 文件与 opencsv 之类的 Java 库一起使用。

    来自opencsv的文档:

    为了阅读,创建一个 bean 来存放你想要阅读的信息, 使用 opencsv 注释对 bean 字段进行注释,然后执行以下操作:

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

    文档链接:http://opencsv.sourceforge.net

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-21
      • 2014-02-13
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多