通过ip地址获取用户的所在城市信息
最近公司市场部在对推广页面进行地区优化时,提及的一个小的需求,目前公司的推广页面都有自己固定的推广地址,但是怕些许用户损失所以需要根据用户的提交数据时所在的网络进行用户地址的定位,自己也找了许多方法,此文章经自己实测,去除网络上部分已死的方法,下面是自己的一些总结:
1:访问搜狐的API:
http://pv.sohu.com/cityjson?ie=utf-8
页面会直接返回一组json数据:用户的ip地址,所在城市,和所在城市区域编码
var returnCitySN = {"cip": "111.202.66.185", "cid": "110000", "cname": "北京市"};
注意:此方法只可以通过访问链接获取returnCitySN值,不可以通过ajax获取,原因不详,
解决办法:页面中直接引入下面地址,直接使用returnCitySN即可。
http://pv.sohu.com/cityjson?ie=utf-8
2:百度地图API
'http://api.map.baidu.com/location/ip?ip='+ 所在IP + '&ak='+'申请的专属'+'ak&coor=bd09ll'
此方法借助百度地图所提供的AIP接口进行调用地址信息。
首先需要进入百度地图API官方申请百度账号(方法过于简单略过)附上地址:http://lbsyun.baidu.com/apiconsole/key
然后点击创建应用选择好各类配置,需要注意的是在于对IP白名单的校验,只有加入到白名单的站点可以使用,具体看百度文档详情。
然后通过ajax跨域获取百度API的的信息,观察API注意到需要用户自己手动获取IP值,这里可以结合上一种方法获取IP值,然后再对API进行拼接。
注意:目测只能通过get方式获取,post请自行测试关于跨域只附上本人自己jsonp的方式,但是需要将其放置在服务器上,否则无效。
本人测试demo
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://tui.jianxuejy.com/public/jq-1.9.1.min.js"></script>
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
var cityCode= returnCitySN.cip;
//获取用户当前地区
$.ajax({
url : 'http://api.map.baidu.com/location/ip?ip='+ cityCode + '&ak=bGI2B5U2FVIepRC7XkWrkoACXC2IUnaT&coor=bd09ll',
// data: data,
dataType: 'jsonp',
cache: false,
timeout: 5000,
// jsonp 字段含义为服务器通过什么字段获取回调函数的名称
jsonp: 'callback',
// 声明本地回调函数的名称,jquery 默认随机生成一个函数名称
jsonpCallback: 'jsonpCallback',
success: function(data) {
console.log( data);
},
error: function() {
console.log('地址请求失败')
}
})
</script>
</head>
<body>
</body>
</html>
返回结果如下
3: https://extreme-ip-lookup.com/json/
此方法优势在于: 可以直接访问页面过去json数据,也可以通过ajax并且不会涉及跨域的问题,不需要用户手动获取IP值,但是返回的值是全拼音的
{
"businessName" : "",
"businessWebsite" : "",
"city" : "Beijing",
"continent" : "Asia",
"country" : "China",
"countryCode" : "CN",
"ipName" : "",
"ipType" : "Residential",
"isp" : "China Unicom Beijing",
"lat" : "39.9288",
"lon" : "116.3889",
"org" : "China Unicom Beijing Province Network",
"query" : "111.202.66.185",
"region" : "Beijing",
"status" : "success"
}
可能对于数据的调用会有一点麻烦,需要用户自行进行处理
4:其他网络常见方法
新浪API: http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 本人测试用的时候已死
淘宝API http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]本人测试用的时候已死
其他:烦请自测。