`

根据ip查询所在城市

 
阅读更多

在系统中,网站的头部一般都有显示是哪个城市的,用户进入到网站的首页后,默认城市应该是用户本地的城市信息,例如:北京,网站就要根据你的IP地 址的信息,查询数据,获取北京部分的数据,呵呵,当然我可能描述的不是很清楚,但是可以理解成,通过IP地址定位地理信息就行。很多人现在使用以QQ数据 库为基础获取地址信息,但不完整、而且不规范。互联网提供很多其他接口可以完成这项功能.

           接口如下:

通过淘宝IP地址库获取IP位置

1. 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",
"region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",
"country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",
"county_id":"-1","isp_id":"100017"}}
其中code的值的含义为,0:成功,1:失败。
 
新浪的接口 :http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42
返回值
var remote_ip_info = {"ret":1,"start":"218.192.0.0","end":"218.192.7.255","country":"\u4e2d\u56fd","province":"\u5e7f\u4e1c","city":"\u5e7f\u5dde","district":"","isp":"\u6559\u80b2\u7f51","type":"\u5b66\u6821","desc":"\u5e7f\u5dde\u5927\u5b66\u7eba\u7ec7\u670d\u88c5\u5b66\u9662"};
通过jqry 获取相应的数据
$.getScript('数据接口',function(){
//新浪:remote_ip_info.country
})
 
根据腾讯IP分享计划的地址获取IP所在地
 
 
实例:

 

 package com.gocheck.common.utils.ipmanager;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 *  根据IP地址获取详细的地域信息
 *  @project:personGocheck
 *  @class:AddressUtils.java
 *  @author:heguanhua E-mail:37809893@qq.com
 *  @date:Nov 14, 2012 6:38:25 PM
 */
publicclassAddressUtils{ 
 /**
  *
  * @param content
  *            请求的参数 格式为:name=xxx&pwd=xxx
  * @param encoding
  *            服务器端请求编码。如GBK,UTF-8等
  * @return
  * @throws UnsupportedEncodingException
  */
 publicString getAddresses(String content,String encodingString)
   throwsUnsupportedEncodingException{
  // 这里调用pconline的接口
  String urlStr ="http://ip.taobao.com/service/getIpInfo.php";
  // 从http://whois.pconline.com.cn取得IP所在的省市区信息
  String returnStr =this.getResult(urlStr, content, encodingString);
  if(returnStr !=null){
   // 处理返回的省市区信息
   System.out.println(returnStr);
   String[] temp = returnStr.split(",");
   if(temp.length<3){
    return"0";//无效IP,局域网测试
   }
   String region =(temp[5].split(":"))[1].replaceAll("\"","");
   region = decodeUnicode(region);// 省份
   /**
    * String country = ""; String area = ""; String region = ""; String
    * city = ""; String county = ""; String isp = ""; for(int i=0;i<temp.length;i++){
    * switch(i){ case 1:country =
    * (temp[i].split(":"))[2].replaceAll("\"", ""); country =
    * decodeUnicode(country);//国家 break; case 3:area =
    * (temp[i].split(":"))[1].replaceAll("\"", ""); area =
    * decodeUnicode(area);//地区 break; case 5:region =
    * (temp[i].split(":"))[1].replaceAll("\"", ""); region =
    * decodeUnicode(region);//省份 break; case 7:city =
    * (temp[i].split(":"))[1].replaceAll("\"", ""); city =
    * decodeUnicode(city);//市区 break; case 9:county =
    * (temp[i].split(":"))[1].replaceAll("\"", ""); county =
    * decodeUnicode(county);//地区 break; case 11:isp =
    * (temp[i].split(":"))[1].replaceAll("\"", ""); isp =
    * decodeUnicode(isp);//ISP公司 break; } }
    */
   // System.out.println(country+"="+area+"="+region+"="+city+"="+county+"="+isp);
   return region;
  }
  returnnull;
 }
 /**
  * @param urlStr
  *            请求的地址
  * @param content
  *            请求的参数 格式为:name=xxx&pwd=xxx
  * @param encoding
  *            服务器端请求编码。如GBK,UTF-8等
  * @return
  */
 privateString getResult(String urlStr,String content,String encoding){
  URL url =null;
  HttpURLConnection connection =null;
  try{
   url =new URL(urlStr);
   connection =(HttpURLConnection) url.openConnection();// 新建连接实例
   connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒
   connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒
   connection.setDoOutput(true);// 是否打开输出流 true|false
   connection.setDoInput(true);// 是否打开输入流true|false
   connection.setRequestMethod("POST");// 提交方法POST|GET
   connection.setUseCaches(false);// 是否缓存true|false
   connection.connect();// 打开连接端口
   DataOutputStream out = new DataOutputStream(connection
     .getOutputStream());// 打开输出流往对端服务器写数据
   out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx
   out.flush();// 刷新
   out.close();// 关闭输出流
   BufferedReader reader =newBufferedReader(newInputStreamReader(
     connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据
   // ,以BufferedReader流来读取
   StringBuffer buffer =newStringBuffer();
   String line ="";
   while((line = reader.readLine())!=null){
    buffer.append(line);
   }
   reader.close();
   return buffer.toString();
  }catch(IOException e){
   e.printStackTrace();
  }finally{
   if(connection !=null){
    connection.disconnect();// 关闭连接
   }
  }
  returnnull;
 }
 /**
  * unicode 转换成 中文
  *
  * @author fanhui 2007-3-15
  * @param theString
  * @return
  */
 publicstaticString decodeUnicode(String theString){
  char aChar;
  int len = theString.length();
  StringBuffer outBuffer =newStringBuffer(len);
  for(int x =0; x < len;){
   aChar = theString.charAt(x++);
   if(aChar =='\\'){
    aChar = theString.charAt(x++);
    if(aChar =='u'){
     int value =0;
     for(int i =0; i <4; i++){
      aChar = theString.charAt(x++);
      switch(aChar){
      case'0':
      case'1':
      case'2':
      case'3':
      case'4':
      case'5':
      case'6':
      case'7':
      case'8':
      case'9':
       value =(value <<4)+ aChar -'0';
       break;
      case'a':
      case'b':
      case'c':
      case'd':
      case'e':
      case'f':
       value =(value <<4)+10+ aChar -'a';
       break;
      case'A':
      case'B':
      case'C':
      case'D':
      case'E':
      case'F':
       value =(value <<4)+10+ aChar -'A';
       break;
      default:
       thrownewIllegalArgumentException(
         "Malformed      encoding.");
      }
     }
     outBuffer.append((char) value);
    }else{
     if(aChar =='t'){
      aChar ='\t';
     }elseif(aChar =='r'){
      aChar ='\r';
     }elseif(aChar =='n'){
      aChar ='\n';
     }elseif(aChar =='f'){
      aChar ='\f';
     }
     outBuffer.append(aChar);
    }
   }else{
    outBuffer.append(aChar);
   }
  }
  return outBuffer.toString();
 }
 // 测试
 publicstaticvoid main(String[] args){
  AddressUtils addressUtils =newAddressUtils();
  // 测试ip 219.136.134.157 中国=华南=广东省=广州市=越秀区=电信
  String ip ="122.49.20.247";
  String address ="";
  try{
   address = addressUtils.getAddresses("ip="+ip,"utf-8");
  }catch(UnsupportedEncodingException e){
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println(address);
  // 输出结果为:广东省,广州市,越秀区
 }
} 
分享到:
评论

相关推荐

    根据IP查询所在地源码

    【描述】中提到,这是一个ASP.NET实现的项目,能够查询IP地址并显示出该IP所在的位置。这个功能的实现依赖于一个IP数据库(ipdata.config),这个数据库通常包含了全球范围内的IP地址与其对应地理位置的映射关系。...

    根据ip判断所在城市

    总的来说,根据IP判断用户所在城市是一项涉及网络协议、数据库查询、API交互等多个IT技术领域的综合应用,对提升用户体验和服务质量具有重要作用。在实际开发中,应根据项目需求、数据准确性和成本等因素选择合适的...

    PHP 根据IP地址获取所在城市

    ### PHP根据IP地址获取所在城市的实现方法 在Web开发中,根据用户IP地址确定其地理位置是一种常见的需求。本文将详细解析一个PHP脚本如何通过IP地址来获取用户的所在城市,并进一步探讨该脚本的工作原理、关键函数...

    根据ip地址查询所在城市

    本文将详细讨论如何在MFC(Microsoft Foundation Classes)环境中,根据IP地址查询所在城市,涉及的技术点包括本地数据库查询以及网络请求。 首先,标题中的“根据ip地址查询所在城市”是指通过特定的算法或服务,...

    根据IP获取所在城市编码

    根据访问者IP 或者说在城市,并获取到城市编码

    根据IP取城市名称

    本资源针对“根据IP取城市名称”的需求提供了完美的解决方案,尤其解决了许多现成代码无法有效处理内外网IP查询的问题。以下是相关知识点的详细说明: 1. IP地址:IP(Internet Protocol)地址是互联网上的设备在...

    用IP显示所在城市名称

    2. **IP匹配**:当需要查询特定IP地址对应的城市时,通过已解析的数据结构快速找到这个IP地址所在的范围,并返回相应城市信息。 3. **异常处理**:有些IP地址可能未在数据库中记录,或者由于隐私保护策略,某些IP...

    根据IP或经纬度查询城市-离线版.zip

    本资源“根据IP或经纬度查询城市-离线版.zip”提供了一种无需联网即可实现地理位置查询的方法,这对于那些对实时性要求不高但又需要定位功能的场景非常实用。下面将详细探讨这一离线定位技术及其核心组件。 首先,...

    PHP根据IP获取所在城市

    在这个函数中,我们首先打开`wry.dat`文件,然后通过二分查找的方式找到指定IP所在的IP段。接着解码读取的数据,获取对应的国家、地区和城市信息。注意,这里的IP库路径默认为`wry.dat`,需要确保文件路径正确。 ...

    PHP 根据IP地址获取所在城市代码以及纯真ip库qqwry.dat下载

    在这个场景中,我们关注的是如何利用PHP根据IP地址获取用户所在的城市代码,这在诸如网站访问统计、地理位置定位等服务中非常常见。这个过程涉及到TCP/IP协议、网络编程和数据库查询等知识。 首先,TCP/IP协议是...

    Thinkphp5根据IP地址获取定位地理位置,精准到城市

    通过IP地址,我们可以大致推断出设备所在的国家、地区甚至城市。然而,这通常需要借助IP数据库,它包含了IP段与地理位置的对应关系。 在ThinkPHP5中,可以使用第三方库或者自建的IP数据库来实现这一功能。描述中...

    php 根据登陆者的ip获取所在城市

    php 根据登陆者的ip获取所在城市;包含新浪接口;淘宝接口,搜狐接口

    根据IP判断所在地区

    4. **处理结果**:根据查询结果,可以获取到IP地址对应的国家、地区、城市等信息,从而实现根据IP判断所在地区的功能。 在项目中,`getip`可能是一个实现了上述功能的脚本或模块,它可以读取输入的IP地址,通过调用...

    java根据IP获取城市代码

    在IT行业中,我们经常需要根据用户的IP地址获取其所在的城市信息,这在提供个性化服务、数据分析、网络安全等领域具有重要作用。Java作为一种广泛使用的编程语言,提供了多种方法来实现这个功能。这篇博客“java根据...

    解析Java根据ip查询所在地区

    在Java编程中,根据IP地址查询其所在地区是一项常见的需求,尤其在网络安全、数据分析和地理位置服务等领域。这个任务可以通过调用公开的API或者使用特定的库来实现。下面我们将详细探讨如何实现这一功能。 首先,...

    根据Ip获取省份城市

    在互联网应用开发中,经常需要通过用户的IP地址来确定其地理位置信息,比如所在省份和城市等。这对于广告定位、用户行为分析、内容推荐等方面有着重要的作用。本文将详细介绍如何使用C#语言在.NET框架下实现这一功能...

    根据ip地址获取城市

    在IT行业中,根据IP地址获取用户所在城市是一项常见的需求,特别是在提供个性化服务、地理位置分析或者安全防护等场景中。这个任务通常由后端服务器来处理,通过查询IP地址数据库或者调用第三方API来实现。以下将...

    PHP+jQuery根据IP定位城市

    在IT行业中,网络应用开发经常会遇到需要根据用户IP地址定位其所在城市的需求。"PHP+jQuery根据IP定位城市"是一个常见的技术实现方案,它结合了服务器端语言PHP和客户端脚本语言jQuery,来获取并处理用户的IP信息,...

    js根据ip跳转到相应的城市的代码

    JavaScript代码会读取这些数据,查找用户IP所在的城市,并据此执行重定向操作。 IP数据库的使用通常涉及以下步骤: 1. 加载数据库文件:JavaScript代码需要有能力在客户端读取和解析这两个二进制或文本格式的数据库...

    根据IP查询用户所在地

    在IT行业中,根据IP查询用户所在地是一项常见的需求,特别是在网络数据分析、网络安全以及地理位置服务等领域。本文将详细探讨如何实现这一功能,并重点介绍“根据IP查询用户所在地”的技术原理及使用ASP.NET实现的...

Global site tag (gtag.js) - Google Analytics