我只想通过提供IP地址来查找地理位置。 我的目标是保存城市,国家,邮政编码和其他信息。
CraftPlayer cp = (CraftPlayer)p;
String adress = cp.getAddress();
有什么可能的可能性,仅使用ip就能找到?
答案 0 :(得分:0)
有很多网站提供免费的IP地理位置数据库。
示例包括:
在插件启动时,您可以下载这些数据库之一,然后在运行时在本地查询它。
如果选择下载.bin格式,则必须初始化本地数据库,然后导入数据。否则,您可以将csv文件与Java库(例如opencsv)一起使用。
来自opencsv的文档:
要阅读,请创建一个Bean,以包含您要阅读的信息, 用opencsv批注对bean字段进行批注,然后执行以下操作:
List<MyBean> beans = new CsvToBeanBuilder(FileReader("yourfile.csv")) .withType(Visitors.class).build().parse();
答案 1 :(得分:0)
我建议使用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会禁止您这样做。