js根据IP地址获取当前的省市
3.阿里巴巴提供了接口,但不支持js跨域请求回调,我们可以在java代码中请求,返回参数:
//工具类
public class ResponseUtil {public static void write(HttpServletResponse response,Object o)throws Exception{response.setContentType("text/html;charset=utf-8");PrintWriter out=response.getWriter();out.println(o.toString());out.flush();out.close();}}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.concurrent.Callable;public class IPLocationTask implements Callable<Map<String, String>> {private String id;private String uri;private String type;public IPLocationTask(String id,String type, String url) {super();this.id = id;this.uri = url;this.type = type;}@Overridepublic Map<String, String> call() throws Exception {URL url=new URL(uri);HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setReadTimeout(10*1000); conn.setRequestMethod("GET"); InputStreamReader inStream = new InputStreamReader(conn.getInputStream(),"UTF-8"); BufferedReader buffer=new BufferedReader(inStream); String inputline=null;String info="";while((inputline=buffer.readLine())!=null){ info+=inputline; } System.out.println(type+"=="+info);return IPLocationParseUtil.parse(type, info);}}
private String id;private String uri;private String type;public IPLocationTask(String id,String type, String url) {super();this.id = id;this.uri = url;this.type = type;}@Overridepublic Map<String, String> call() throws Exception {URL url=new URL(uri);HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setReadTimeout(10*1000); conn.setRequestMethod("GET"); InputStreamReader inStream = new InputStreamReader(conn.getInputStream(),"UTF-8"); BufferedReader buffer=new BufferedReader(inStream); String inputline=null;String info="";while((inputline=buffer.readLine())!=null){ info+=inputline; } System.out.println(type+"=="+info);return IPLocationParseUtil.parse(type, info);}}
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSON;
public class IPLocationParseUtil {
/**
* 解析 各ip查询提供 服务的返回结果
* @param type
* @param result
* @return
*/
public static Map<String, String> parse(String type,String result){
if(StringUtils.isEmpty(result)){
Map<String, String> error=new HashMap<String, String>();
error.put("status", "error");
error.put("msg", "exception");
return error;
}
Map<String, String> map=new HashMap<String, String>();
map.put("type", type);
switch (type) {
case "taobao":
//{"code":0,"data":{"country":"\u4e2d\u56fd","country_id":"CN","area":"\u897f\u5317","area_id":"600000","region":"\u7518\u8083\u7701","region_id":"620000","city":"\u5170\u5dde\u5e02","city_id":"620100","county":"","county_id":"-1","isp":"\u7535\u4fe1","isp_id":"100017","ip":"42.91.160.188"}}
Map<String, Object> obj =(Map<String, Object>) JSON.parse(result);
if(obj!=null&&"0".equals(String.valueOf(obj.get("code")))){
Map<String, String> data=(Map<String, String>)obj.get("data");
map.put("status", "0");
map.put("nation", data.get("country"));
map.put("provice", data.get("region"));
map.put("city", data.get("city"));
map.put("isp", data.get("isp"));
map.put("cityCode", data.get("city_id"));
map.put("proviceCode", data.get("region_id"));
}
break;
case "sina":
//{"ret":1,"start":-1,"end":-1,"country":"\u4e2d\u56fd","province":"\u6d59\u6c5f","city":"\u676d\u5dde","district":"","isp":"","type":"","desc":""}
Map<String, String> objs =(Map<String, String>) JSON.parse(result);
if(objs!=null&&"1".equals(String.valueOf(objs.get("ret")))){
map.put("status", "0");
map.put("nation", objs.get("country"));
map.put("provice", objs.get("province"));
map.put("city", objs.get("city"));
map.put("isp", objs.get("isp"));
map.put("cityCode", "-1");
map.put("proviceCode", "-1");
}
break;
case "m126":
//var lo="甘肃省", lc="兰州市"; var localAddress={city:"兰州市", province:"甘肃省"}
String retStr=result.substring( result.indexOf("{"),result.lastIndexOf("}")+1);
Map<String, String> objm =(Map<String, String>) JSON.parse(retStr);
//中文乱码,暂不解决
break;
case "baidu":
//{"address":"CN|\u7518\u8083|\u5170\u5dde|None|CHINANET|0|0","content":{"address_detail":{"province":"\u7518\u8083\u7701","city":"\u5170\u5dde\u5e02","district":"","street":"","street_number":"","city_code":36},"address":"\u7518\u8083\u7701\u5170\u5dde\u5e02","point":{"y":"4284074.36","x":"11557683.25"}},"status":0}
Map<String, Object> objb =(Map<String, Object>) JSON.parse(result);
if(objb!=null&&"0".equals(String.valueOf(objb.get("status")))){
map.put("status", "0");
Map objd= (Map)objb.get("content");
Map<String, String> detail=(Map<String, String>) objd.get("address_detail");
map.put("nation", "中国");
map.put("provice", detail.get("province"));
map.put("city", detail.get("city"));
map.put("isp", "");
map.put("cityCode", "-1");
map.put("proviceCode", "-1");
}
break;
case "gaode":
//{"status":"1","info":"OK","infocode":"10000","province":"甘肃省","city":"兰州市","adcode":"620100","rectangle":"103.48207,35.95046134;104.0445292,36.22263808"}
Map<String, Object> objg =(Map<String, Object>) JSON.parse(result);
if(objg!=null&&"1".equals(String.valueOf(objg.get("status")))){
map.put("status", "0");
map.put("nation", "中国");
map.put("provice", String.valueOf(objg.get("province")));
map.put("city", String.valueOf(objg.get("city")));
map.put("isp", "");
map.put("cityCode", String.valueOf(objg.get("adcode")));
map.put("proviceCode", String.valueOf(objg.get("adcode")).substring(0,2)+"0000");
}
break;
case "qqmap":
//{"status":0,"message":"query ok","result":{"ip":"42.91.5.62","location":{"lat":36.10396,"lng":103.71878},"ad_info":{"nation":"中国","province":"甘肃省","city":"兰州市","district":"安宁区","adcode":620105}}}
Map<String, Object> objq =(Map<String, Object>) JSON.parse(result);
if(objq!=null&&"0".equals(String.valueOf(objq.get("status")))){
map.put("status", "0");
Map objd= (Map)objq.get("result");
Map<String, String> detail=(Map<String, String>) objd.get("ad_info");
map.put("nation", "中国");
map.put("provice", detail.get("province"));
map.put("city", detail.get("city"));
map.put("isp", "");
map.put("cityCode",detail.get("adcode"));
map.put("proviceCode", detail.get("adcode").substring(0,2)+"0000");
}
break;
default:
map.put("status", "error");
map.put("msg", "result error");
break;
}
return map;
}
@Service
public class IPGPSService {public static final String taobao="http://ip.taobao.com/service/getIpInfo.php?ip=";public static final String sina="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=";public static final String M126="http://ip.ws.126.net/ipquery?ip=";public static final String baidu="http://api.map.baidu.com/location/ip?ak=F45*******&ip=";public static final String gaode="http://restapi.amap.com/v3/ip?key=c7a9a********&ip=";public static final String qqmap="http://apis.map.qq.com/ws/location/v1/ip?key=WX***********&ip=";//对应的ak/key需要到对应的网站去申请 如:高德 http://lbs.amap.com/api/webservice/guide/api/ipconfig public Map<String, String> getIpLocation(String ip){Map<String, String> retMap=new HashMap<String, String>();boolean right=true;ArrayList<Future<Map<String, String>>> results = new ArrayList<Future<Map<String, String>>>() ;//ExecutorService service=null;try {service = Executors.newFixedThreadPool(2);results.add(service.submit(new IPLocationTask("1", "taobao", taobao+ip)));results.add(service.submit(new IPLocationTask("2", "gaode", gaode+ip)));results.add(service.submit(new IPLocationTask("3", "qqmap", qqmap+ip)));do {Iterator<Future<Map<String, String>>> iterator = results.iterator();while(iterator.hasNext()){Future<Map<String, String>> future= iterator.next();if(future.isDone()){try {retMap=future.get();} catch (Exception e) {}if(retMap!=null&&"0".equals(retMap.get("status"))){right=false;break;}else{iterator.remove(); //失败的移除掉}}if(results.size()==0){right=false; //全是失败的结果retMap.put("status", "error");retMap.put("status", "all faid");}}if(results.size()<1){break;}} while (right);} catch (Exception e) {e.printStackTrace();}finally{service.shutdown();service=null;} return retMap;}public static void main(String[] args) {Map<String, String> ret = new IPGPSService().getIpLocation("42.91.160.188");System.out.println("ret"+ret);for (String key : ret.keySet()) {System.out.println(key+"=="+ret.get(key));}/*for (int i = 0; i < 5; i++) {long t=System.currentTimeMillis();System.out.println(i+"costtime:"+ );System.out.println((System.currentTimeMillis()-t));}*/}
}@Controller
public class WebServiceController {
@AutowiredIPGPSService iPGPSService;
@RequestMapping(value = "/public/ipquery/getIpInfo")public void getIpInfo(String ip,HttpServletRequest request,HttpServletResponse response) {//如果ip为空,获取当前登陆的ipString cip=IPUtil.getClientIpAddr(request);if(StringUtils.isEmpty(ip)){ip=cip;}Map<String,String> resultMap=null;try {if(StringUtils.isEmpty(ip)){throw new Exception();}resultMap=iPGPSService.getIpLocation(ip);resultMap.put("cip", ip);} catch (Exception e) {resultMap=new HashMap<String, String>();resultMap.put("status", "0"); //失败后默认至兰州resultMap.put("nation", "中国");resultMap.put("provice", "甘肃省");resultMap.put("city", "兰州市");resultMap.put("isp", "");resultMap.put("cityCode","620100");resultMap.put("proviceCode", "620000");resultMap.put("type", "default");}String callback=request.getParameter("callback");String retStr=JSON.toJSONString(resultMap);if(StringUtils.isNotBlank(callback)){retStr=callback+"("+retStr+")";}try {ResponseUtil.write(response, retStr);} catch (Exception e) {e.printStackTrace();}}
js:客户端调用java后台
<script type="text/javascript">$(function(){var ipServer = "localhost:8080/projectweb";$.ajax({url:ipServer+"/public/ipquery/getIpInfo?callback=?",async :false,dataType:"jsonp",type:'get',success:function(data){console.log(data)},error:function(XMLHttpRequest, textStatus, errorThrown) {console.log(XMLHttpRequest.status);console.log(XMLHttpRequest.readyState);console.log(textStatus);}});}
</script>
data 的内容:
{"nation":"中国","city":"兰州","cityCode":"620100","provice":"甘肃","isp":"电信","proviceCode":"620000","type":"taobao","status":"0"}
2.根据搜狐提供的API获取当前的地区:
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
调用该API返回值为:
var returnCitySN = {"cip": "42.91.160.**", "cid": "620000", "cname": "甘肃省"};
$(document).ready(function(){var areaCode = returnCitySN["cid"]; //地区编码var thisIp = returnCitySN["cip"]; //IPvar areaName = returnCitySN["cname"]; //只能获取到省}
1.根据新浪提供的API获取:
<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>
调用该API 返回值:
var remote_ip_info = {"ret":1,"start":-1,"end":-1,"country":"\u4e2d\u56fd","province":"\u7518\u8083","city":"\u5170\u5dde","district":"","isp":"","type":"","desc":""};
$(document).ready(function(){ alert("当前地区"+remote_ip_info["province"]+"省"+remote_ip_info["city"]+"市"+remote_ip_info["district"]+"区");
}
注:新浪的暂时不能用了,请大家参考搜狐的或阿里巴巴的
js根据IP地址获取当前的省市相关推荐
- 前端获取自己所在的ip_前端使用js根据ip地址获取城市地理位置
标签: 前端使用js根据ip地址获取城市地理位置 一.使用js根据ip获取地址位置 1.在html页面,加入如下代码: var cityCode=returnCitySN.cid; document. ...
- js通过IP地址获取所在城市
话不多说,直接贴代码! 将这段代码运行一下就OK了: <html xmlns="http://www.w3.org/1999/xhtml"> <head runa ...
- js根据ip地址获取省份城市的方法
今天发现新浪的IP地址查询接口已经访问不了,也就是说不能用了,然后重新试了其他的,找到搜狐的ip地址可以用 不能用 新浪的IP地址查询接口 http://int.dpool.sina.com.cn/i ...
- js根据ip地址获取城市地理位置
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script> va ...
- 【Java】根据IP地址获取省市
最近要做一个埋点的功能,需求里要求记录用户登录的IP和地点,打算利用ip2region.db实现 首先下载ip2region.db 地址:下载地址 ip2region是一套准确率99.9%的ip地址定 ...
- php ip 城市,php如何根据IP地址获取所在城市
本文主要和大家分享php如何根据IP地址获取所在城市,本文主要以代码的形式,希望能帮助到大家.<?php header('Content-Type:text/html;Charset=utf-8 ...
- C# 网络编程之通过ip地址获取地理位置(补充)
前面我写过一篇文章"C# 网络编程之获取本机名.ip地址.域名.物理位置"里面可以根据输入的网址根据其ip地址获取器物理位置,其中该部分主要代码是通过有道网提供的在线第三方接口实现 ...
- Python根据IP地址获取MAC地址
Python3根据IP地址获取MAC地址(不能获取本机IP,可以获取与本机同局域网设备IP的MAC) main.py #!/usr/bin/env python3 # -*- coding: utf- ...
- JAVA程序 通过IP地址 获取MAC地址
转载自:https://blog.csdn.net/chwshuang/article/details/46958719 叙述 我们都知道通过在电脑上敲 cmd 后,输入ipconfig -all 来 ...
最新文章
- 比特币核心(BCE)或许并没有你想象的强大
- ASP.NET-后台cookie与前台JQUERY解析cookie
- jenkins构建后脚本不执行_接口管理工具ApiPost-预(后)执行脚本常用方法集合
- eclipse支持html,让eclipse完全支持HTML/JS/CSS智能提示
- python requests 乱码_python3 requests 抓取乱码问题
- nginx 配置https_nginx 配置https
- hibernate面试问题_Hibernate面试问答
- 《我们不一样》β冲刺_3
- c语言冒泡排序法代码
- 智能家居语音控制系统项目毕业答辩
- java8方法引用-调用特定方法的Lambda的一种快捷写法
- TASK SCHEDULE(任务计划)服务无法运行 解决方案
- Java基础语法96-Java91011新特性
- 汉诺塔C语言递归实现
- 当厌氧菌遇见氧气之后,氧毒性、耐受性和防御性机制
- 信息收集-CMS识别
- 全国地区车牌字母对应的地区
- 第八周 项目5-计数的模式匹配
- Linux搭建LDAP Account Manager(LAM)
- 计算机学院教学管理ER图,教学管理系统数据库ER图和SQL语句.doc
热门文章
- 最便宜的方式学习阿里云产品之使用竞价式实例ECS
- 机器学习算法——手动搭建决策树分类器(代码+作图)
- 惠普暗影精灵Plus 3代 (OMEN 17-an014TX)参数
- 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果
- Android 模仿淘宝历史记录,记录存在手机内
- java里arraylist删除节点方法_Java之——删除ArrayList中的反复元素的2种方法
- WebDay05 JQuery框架
- AM335x 如何修改phy及双网络使用说明(精华!!!)
- 校园共享单车停放问题的调研
- Java学习 --- 类与对象