1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > js根据IP地址获取当前的省市

js根据IP地址获取当前的省市

时间:2022-11-15 14:32:46

相关推荐

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 .HttpURLConnection;import .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 mons.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":"60","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":"60","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":65}}}

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;

}

@Servicepublic class IPGPSService {public static final String taobao="/service/getIpInfo.php?ip=";public static final String sina="http://int./iplookup/iplookup.php?format=json&ip=";public static final String M126="http://ip./ipquery?ip=";public static final String baidu="http://api./location/ip?ak=F45*******&ip=";public static final String gaode="/v3/ip?key=c7a9a********&ip=";public static final String qqmap="http://apis./ws/location/v1/ip?key=WX***********&ip=";//对应的ak/key需要到对应的网站去申请 如:高德 /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));}*/}}@Controllerpublic 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","60");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":"60","provice":"甘肃","isp":"电信","proviceCode":"620000","type":"taobao","status":"0"}

2.根据搜狐提供的API获取当前的地区:

<script src="/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./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"]+"区");}

注:新浪的暂时不能用了,请大家参考搜狐的或阿里巴巴的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。