我就是想简单获取当前的城市名称,在网上找了好多资料,都是百度地图申请安卓AK,下载SDK!!!这样太麻烦了!!!在申请AK时候,就找不到那几个要填的选项!!!
后来经过不懈努力,终于找到简单的方法,百度地图API只需要配置服务端的ak就可以了,这个相当简单!!!
然后就是通过IP地址获取城市名称!!!话不多说,直接上干货,希望做同样功能的伙伴能少走弯路!!!
1.通过js获取 IP
这里是代用的搜狐接口
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script>
console.log(returnCitySN.cip);//当前ip
`</script>``
将IP通过ajax发送到后台看回调就可以了
2.关键的来了!!! 返回的就是你想要的数据了!!!
public function local_ip()
{
//API控制台申请得到的ak(此处ak值仅供验证参考使用)
$ak = '你自己的秘钥';
//应用类型为for server, 请求校验方式为sn校验方式时,系统会自动生成sk,可以在应用配置-设置中选择Security Key显示进行查看(此处sk值仅供验证参考使用)
$sk = '你自己的sk';
//以Geocoding服务为例,地理编码的请求url,参数待填
$url = "http://api.map.baidu.com/location/ip?ip=%s&ak=%s&sn=%s";
//get请求uri前缀
$uri = '/location/ip';
//地理编码的请求中address参数
$ip = $_POST['ip'];
//构造请求串数组
$querystring_arrays = array (
'ip' => $ip,
'ak' => $ak
);
//调用sn计算函数,默认get请求
$sn = $this -> caculateAKSN($sk, $uri, $querystring_arrays);
//请求参数中有中文、特殊字符等需要进行urlencode,确保请求串与sn对应
$target = sprintf($url, urlencode($ip), $ak, $sn);
$res = file_get_contents($target);
$res = json_decode($res,true);
echo json_encode($res);
}
//配合上面的通过ip获取地址
public function caculateAKSN($sk, $url, $querystring_arrays, $method = 'GET')
{
if ($method === 'POST'){
ksort($querystring_arrays);
}
$querystring = http_build_query($querystring_arrays);
return md5(urlencode($url.'?'.$querystring.$sk));
}