文档章节

通过百度普通IP定位API获取IP的地理位置

张悟空
 张悟空
发布于 2017/03/15 17:30
字数 414
阅读 314
收藏 1
package kl.comm.tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.json.JSONException;
import org.json.JSONObject;

public class Ip2LocationViaBaidu {
	/**
	 * @param ip
	 *            查询的地址
	 * @return status
	 * 				0:正常
	 * 				1:API查询失败
	 * 				2:API返回数据不完整
	 * @throws IOException
	 * @throws JSONException
	 */
	public static Object[] getLocation(String ip) throws IOException, JSONException {
		String lng = null;// 经度
		String lat = null;// 纬度
		String city = null;// 城市名
		String status = "0";// 成功
		String ipString = null;
		String jsonData = ""; // 请求服务器返回的json字符串数据
		try {
			ipString = java.net.URLEncoder.encode(ip, "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String key = "*************";// 百度密钥(AK)
		String url = String.format("http://api.map.baidu.com/location/ip?ak=%s&ip=%s&coor=bd09ll", key, ipString);// 百度普通IP定位API
		URL myURL = null;
		URLConnection httpsConn = null;
		try {
			myURL = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		InputStreamReader insr = null;
		BufferedReader br = null;
		try {
			httpsConn = (URLConnection) myURL.openConnection();// 不使用代理
			if (httpsConn != null) {
				insr = new InputStreamReader(httpsConn.getInputStream(), "UTF-8");
				br = new BufferedReader(insr);
				String data = null;
				int count = 1;
				while ((data = br.readLine()) != null) {
					jsonData += data;
				}
				JSONObject jsonObj = new JSONObject(jsonData);
				if ("0".equals(jsonObj.getString("status"))) {
					city = jsonObj.getJSONObject("content").getJSONObject("address_detail").getString("city");
					lng = jsonObj.getJSONObject("content").getJSONObject("point").getString("x");
					lat = jsonObj.getJSONObject("content").getJSONObject("point").getString("y");
					if (city.isEmpty() || lng.isEmpty() || lat.isEmpty()) {
						status = "2";// API返回数据不完整
					}
				} else {
					status = "1";// API查询失败
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (insr != null) {
				insr.close();
			}
			if (br != null) {
				br.close();
			}
		}
		return new Object[] { status, city, lng, lat };
	}
}

把上边的百度密钥换成你自己的,下边是API返回的json数据格式

{  
    address: "CN|北京|北京|None|CHINANET|1|None",    #地址  
    content:    #详细内容  
    {  
        address: "北京市",    #简要地址  
        address_detail:    #详细地址信息  
        {  
            city: "北京市",    #城市  
            city_code: 131,    #百度城市代码  
            district: "",    #区县  
            province: "北京市",    #省份  
            street: "",    #街道  
            street_number: ""    #门址  
        },  
        point:    #当前城市中心点  
        {  
            x: "116.39564504",  
            y: "39.92998578"  
        }  
    },  
    status: 0    #返回状态码  
}

© 著作权归作者所有

张悟空

张悟空

粉丝 8
博文 71
码字总数 20588
作品 0
郑州
程序员
私信 提问
网站如何定位用户省份?

我的网站有一个页面想根据访问用户省份不同展示不同内容, 所以想知道怎么定位用户省份? 了解的方案大概有: 1. 通过前端地理位置API获得经纬度, 再用百度地图API查省份; 2. 通过前端第三方jav...

sanzado
2017/05/17
198
7
百度地图桌面程序源码,CatchPacket网络抓包软件

百度地图桌面程序源码,CatchPacket网络抓包软件 Extjs c# asp.net 兼职 qq:2294508843 百度地图桌面程序源码 功能介绍: 1.根据ip定位地理位置信息,ip网段,isp提供商,ip地理位置 2.根据i...

acer
2014/11/03
264
1
web端定位:获取当前地理位置

方法一:html5原生提供的定位: 讲解:在支持HTML5的浏览器下,navigator对象下有一个属性----geolocation,而geolocation属性又有个方法getCurrentPosition(回调函数1,回调函数2)可以通过浏...

zwjjap
2016/05/11
3.5K
0
移动端webview定位--爬坑经验

写在前面 最近的一个业务需求,要求在进入页面之后,获取用户的地理位置,然后根据地理位置展示相关的内容。 说起来似乎是一个非常简单的需求,但是。。如果你的公司有服务的话,并且不考虑适...

LucasTwilight
2018/10/23
0
0
微信小程序通过ip获取用户所在城市

在微信小程序中, 获取用户的地理位置是需要权限的, 如果只是获取用户所在的城市信息, 那只需查看用户ip所在的城市就好了, 下面我们就完成获取用户ip的小程序逻辑~ 根据用户ip获取地理位置 根...

木子昭
2018/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
47分钟前
4
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
58分钟前
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
6
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部