长沙PHP培训
达内长沙芙蓉路中心

15017569023

热门课程

PHP:IP地址查询

  • 时间:2016-11-04 16:52
  • 发布:长沙达内php培训学校
  • 来源:PHP教程

长沙PHP培训班的老师今天给同学们讲一下IP地址查询。

以前用过的有12306的:数据、接口,有时间整理出来,12306的有点乱就是了。还有扇贝以及有道的API,之前用在留言板里自动翻译,公司用过百度地图以及百科的,百科的纯用file_get_contents然后preg_match_all去获取,类似的还做过新闻采集,真是心累,还没用过cURL。

百度API:IP地址查询

效果:

这段代码没啥看的,都是百度的示例代码。

1    

2    if(!isset($_POST['ip']))

3        exit;

4    $ip=trim($_POST['ip']);

5    $ch = curl_init();

6    $url = 'http://apis.baidu.com/apistore/iplookupservice/iplookup?ip='.$ip;

7    $header = array(

8        'apikey:百度API密钥',

9    );

10    //添加apikey到header

11    curl_setopt($ch, CURLOPT_HTTPHEADER , $header);

12    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

13    //执行HTTP请求

14    curl_setopt($ch , CURLOPT_URL , $url);

15    $res = curl_exec($ch);

16    curl_close($ch);

17    $data=json_decode($res,true); 

18    

19    $str="<span style='color:#26B198'>";

20    if($data['errNum']==0 && !empty($data['retData']['country'])){

21        $str.="{$data['retData']['country']}.{$data['retData']['province']}.{$data['retData']['city']}.{$data['retData']['district']},{$data['retData']['carrier']}";

22    }

23    $str.="</span>";

24    echo $str;

json_decode()的第二个参数为true代表返回数组,比较好使用数据。

其中,IP不输入的话,为自己的IP,搜索网上的真实IP也用的不理想,还在本地就更乱了。所以获取IP用的站长之家的数据,不严谨。

1 //由于IP总获取不到,就从站长之家偷了,分别获取PC和wap端的

2        $ipc=curl_init();

3        curl_setopt($ipc,CURLOPT_RETURNTRANSFER,1);

4        curl_setopt($ipc,CURLOPT_URL,"http://ip.chinaz.com");

5        $ipk=curl_exec($ipc);

6        curl_close($ipc);

7        preg_match('/<dd class="fz24">(.*?)<\/dd>/is', $ipk, $ipx);

8        $ip='';

9        if(isset($ipx[1])){

10            if(preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ipx[1])) {

11                $ip=$ipx[1];

12            }

13        }else{

14            $ipc=curl_init();

15            curl_setopt($ipc,CURLOPT_RETURNTRANSFER,1);

16            curl_setopt($ipc,CURLOPT_URL,"http://m.tool.chinaz.com/ipsel");

17            $ipk=curl_exec($ipc);

18            curl_close($ipc);

19            preg_match('/<b class="fontcolor02">(.*?)<\/b>/is', $ipk, $ipx);

20            if(isset($ipx[1])){

21                if(preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ipx[1])) {

22                    $ip=$ipx[1];

23                }

24            }

25        }

直接去class名为fz24的div里取的(类似还可以在站长之家取到地址分辨率操作系统等等,但终究不是长久之计),出来再判断是不是ip格式,最后的$ip如果有的话就是本机IP。

用自己IP测试的效果如下:分别是百度,淘宝,新浪:

可以看出来百度确定到区县了,淘宝没获取到但淘宝信息明显比较多邮编/行政区码都有,新浪有点不足了。

IP地址还可以,通过百度地图API获取坐标,+增加坐标:

//百度地图通过IP获取坐标

$ch=curl_init();

curl_setopt($ch,CURLOPT_URL,"http://api.map.baidu.com/location/ip?ak=百度开发者密钥&ip=$ip");

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

$res=curl_exec($ch);

$data=json_decode($res,true);

if($data['status']===0){

if(isset($data['content']['point']['x']) && isset($data['content']['point']['y']))

$str.='&nbsp;&nbsp;['.$data['content']['point']['x'].','.$data['content']['point']['y'].']';

}

curl_close($ch);

$str.="</span>";

echo $str;

这种坐标精度不高,就这样只到市,最终效果:

长沙PHP培训班的老师提醒注意:API密钥和AK密钥不是一个东西,API密钥是百度APIStroe的密钥,AK密钥属于百度地图开发密钥。

上一篇:PHP Web实时消息后台服务器推送技术:GoEasy
下一篇:使用curl制作简易搜索

马上预约三天免费体验课

姓名:

电话:

PHP Web实时消息后台服务器推送技术:GoEasy

Web实时消息GoEasy web推送实例

【长沙PHP培训班】PHP知识点中的git

linux下yum安装PHP APC

选择城市和中心
贵州省

广西省

海南省