根据IP定位用户所在城市信息

根据IP定位用户所在城市信息

http://www.9958.pw/post/city_ip

1.调用新浪IP地址库

新浪提供了开放的IP地址库数据供开发者调用,调用地址:

http://int.dpool.sina.com.cn/iplookup/iplookup.php,即可返回当前ip所在的省市信息。

<script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.cityselect.js"></script> <script type="text/javascript" src="http://int.dpool.sina.com.cn/iplookup/iplookup.php? format=js"></script>

我们先载入jquery库和cityselect城市下拉插件,然后调用新浪的IP地址库,并以js的形式返回,当然如果你想查询某一指定IP所在的城市信息可以使用接口地址如:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.123.123.123,将参数ip值换成指定的IP地址即可。

本地js调用:

var myprovince = remote_ip_info['province']; var mycity = remote_ip_info['city'] var mydistrict = remote_ip_info['district']; $(function(){
                                $("#city_1").citySelect({
                                      prov:myprovince, city:mycity }); });

HTML代码为:

<h3>调用新浪IP库接口</h3> <p>您所在的城市是:<script>document.write(myprovince+' '+mycity);</script></p> <div id="city_1"> <select class="prov"></select> <select class="city"></select> </div>

2.调用淘宝IP地址库

淘宝也提供了比较权威的IP地址库,调用地址:http://ip.taobao.com/service/getIpInfo.php?ip=123.123.123.123,返回对应IP的省市相关信息。

调用方法:

$(function(){
         $.getJSON("getTaoIP.php",function(json){
                   var myprovince2 = json.data.region; var mycity2 = json.data.city; $("#city_2").html("您所在的城市是:"+myprovince2+mycity2); }); });

getTaoIP.php用来获取淘宝的对应IP的省市信息,返回的是json格式的数据。

$ip = get_client_ip(); //获取当前用户的ip  $url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; $data = file_get_contents($url); //调用淘宝接口获取信息  echo $data;

get_client_ip()用来获取本地用户的IP地址。

//获取用户真实IP  function get_client_ip() {
            if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return ($ip); }

案例代码分享

数据表

DROP TABLE IF EXISTS `think_ipdb`; CREATE TABLE `think_ipdb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip` varchar(30) DEFAULT NULL, `country` varchar(50) DEFAULT NULL, `province` varchar(30) DEFAULT NULL, `city` varchar(30) DEFAULT NULL, `district` varchar(30) DEFAULT NULL, `isp` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ip` (`ip`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=24780 DEFAULT CHARSET=utf8 COMMENT='本地 IP地址库';

调用实例

$think_ipdb = M('think_ipdb',null,C('UC_DB_DSN')); // 实例化User对象 $city = $this->_getLocalDbIp($think_ipdb,$value['ip']);

类方法

/** * 获取本地ip库信息 * @param type $db * @param type $ip */ private function _getLocalDbIp($db,$ip) {
                  if(empty($ip)){
                         return null; } $tmp = $db->where(array('ip'=>$ip))->find(); if(empty($tmp)){
                                                     $address = getAddressFromIp($ip); if(!empty($address)){
                                                                  $address['ip'] = $ip; $db->add($address); return $address['city']; }else{
                                                                                          return null; } }else{
                                                                                                     $city = $tmp['city']; } }

通用函数

//根据ip地址获取地址信息 function getAddressFromIp($ip){
            $urlTaobao = 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip; $urlSina = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$ip; $json = file_get_contents($urlTaobao); $jsonDecode = json_decode($json); if($jsonDecode->code==0){
                                              //如果取不到就去取新浪的 $data['country'] = $jsonDecode->data->country; $data['province'] = $jsonDecode->data->region; $data['city'] = $jsonDecode->data->city; $data['isp'] = $jsonDecode->data->isp; return $data; }else{
                                                                                                        $json = file_get_contents($urlSina); $jsonDecode = json_decode($json); $data['country'] = $jsonDecode->country; $data['province'] = $jsonDecode->province; $data['city'] = $jsonDecode->city; $data['isp'] = $jsonDecode->isp; $data['district'] = $jsonDecode->district; return $data; } } //根据ip地质获取城市名 function getCityFromIp($ip){
                                                                                                                                                                                      $data = getAddressFromIp($ip); return $data['city']; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113148.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月23日 下午4:00
下一篇 2021年10月23日 下午5:00


相关推荐

  • ECharts 顶部 label 换行

    ECharts 顶部 label 换行series name type bar label show true position top formatter 失效片 c formatter function v 让 series 中的文字进行换行 文字中遇到空格就换

    2026年3月18日
    2
  • 搭建DNS服务器的那些知识「建议收藏」

    搭建DNS服务器的那些知识「建议收藏」一、DNS服务概述:1.什么是DNS?DNS(DomainNameSystem)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析。DNS协议运行在UDP协议之上,使用端口53号。2.什么是域、域名?域(domain)是计算机网络的一种形式,其中所有用户账户,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。

    2025年9月16日
    6
  • android之layout布局和ListView中的一些属性介绍[通俗易懂]

    一.android:singleLine设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text=”test_ singleLine “android:singleLine=”true”android:layout_width=”20dp”将只显示”t…”如果不设置singleLine或者设置为false

    2022年3月10日
    46
  • 如何利用腾讯云服务器搭建个人网站[通俗易懂]

    如何利用腾讯云服务器搭建个人网站[通俗易懂]你是否想要搭建一个网站,却苦苦找不到方法,你是否看到别人搭建的网站,自己羡慕不已,今天,就教大家来搭建一个简单的个人网站。在这里,我采用的是腾讯云服务器搭建的。首先,需要注册腾讯云账号,登录腾讯云,点击控制台进入控制台后,选择域名注册看到的结果如下图所示:开始注册域名:提交订单后,域名就注册成功了。接下来需要购买云主机(云服务器),流程如下用…

    2022年6月29日
    48
  • 国外免费php mysql空间_超大20G国外免费php空间 支持PHP,MYSQL数据库[通俗易懂]

    国外免费php mysql空间_超大20G国外免费php空间 支持PHP,MYSQL数据库[通俗易懂]SupportPHP,MYSQLdatabase,domainnamesuper-boundforei,本文标签:免费PHP空间SupportPHP,MYSQLdatabase,domainnamesuper-boundforeignfreephpspace20GFreePHPspacespecificdescription:*20Gboffre…

    2022年6月24日
    27
  • Traceroute原理学习

    Traceroute原理学习Traceroute可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。曾经介绍过IP记录路由的选项RR,为什么不使用这个选项而另外开发一个新的应用程序Traceroute呢?原因有三:其一,并不是所有的路由器都支持记录路由这个选项;其二,记录路由一般是单向的选项,发送端设置了该选项,接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端。大多数的ping服

    2022年7月21日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号