• [1]IP地址查询


    今天起开始玩百度APIStore里面的免费API。以前用过的有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地址查询可以使用新浪、淘宝和百度三家的接口:

    1.新浪:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=***.**.**.*  //js是js格式,可改为json
    2.淘宝:http://ip.taobao.com/instructions.php //这链接是介绍,接口在http://ip.taobao.com/service/getIpInfo.php?ip=***.**.***.**
    3.百度:http://api.map.baidu.com/lbsapi/cloud/ip-location-api.htm

    用自己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;

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

    注:API密钥和AK密钥不是一个东西,API密钥是百度APIStroe的密钥,AK密钥属于百度地图开发密钥。

  • 相关阅读:
    03server
    Storm介绍(一)
    storm总结
    Spring源码分析(七)扩展接口BeanPostProcessors源码分析
    技术大牛养成指南
    02装配bean
    02Activity
    maven构建项目
    IDEA使用
    从GIt上导出Maven项目
  • 原文地址:https://www.cnblogs.com/warcraft/p/6022770.html
Copyright © 2020-2023  润新知