为了账号安全,请及时绑定邮箱和手机立即绑定

通过 IP 获取地理定位(Spigot 1.8 和 1.13.2)

通过 IP 获取地理定位(Spigot 1.8 和 1.13.2)

慕沐林林 2023-03-09 14:12:47
我只想通过提供 ip 地址来找出地理位置。我的目标是保存城市、国家、邮政编码和其他信息。CraftPlayer cp = (CraftPlayer)p; String adress = cp.getAddress();任何短的可能性,仅通过使用 ip 来找出?
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我推荐使用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 会禁止您这样做。


查看完整回答
反对 回复 2023-03-09
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

有很多网站提供免费的 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


查看完整回答
反对 回复 2023-03-09
  • 2 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信