现在的位置: 首页 > 编程开发 > Php > 编程开发 > 正文

PHP利用新浪和百度ip库API获取IP地址所在的地理位置

2015年10月16日 Php, 编程开发 ⁄ 共 1307字 ⁄ 字号 暂无评论

48fd86b626cbe39dd6d4e8cdbe412ae7推荐下面两个接口,写的两个小函数

推荐下面两个接口,写的两个小函数
新浪ip库接口,经测试速度快,稳定

// 根据IP查询用户地理位置,新浪API

function getCity($ip)
{
    if(!empty($ip)){
        $url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=".$ip;
        $ip = json_decode(file_get_contents($url));
        if ((string)$ip->ret == 0) {
            return false;
        }
        $data = array(
            'country'=>$ip->country,
            'region'=>$ip->province,
            'city'=>$ip->city,
            'isp'=>$ip->isp,
        );
        return $data;
    }
}

淘宝ip库接口,经测试 查询速度较慢,有时候502错误 但数据准确,查询的较信息详细 应该是用的人多吧

// 根据IP查询用户地理位置,淘宝API
function getCityByTaoBao($ip)
{
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
    $ip=json_decode(file_get_contents($url));
    if((string)$ip->code=='1'){
        return false;
    }
    $data = (array)$ip->data;
    return $data;
}

下面这个是经过我使用改良了的综合版

/**
 * 根据IP查询用户地理位置,默认淘宝API优先级为1.
 * 发现淘宝接口不稳定,则自动改为新浪接口.
 * 设置了超时为5秒来解决连接超时问题.
 */
function getCityByTaoBao($ip)
{
    // ip 接口
    $url = "http://ip.taobao.com/service/getIpInfo.php?ip=" . $ip;
    $urls = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=" . $ip;
    // 设置请求超时时间.
    $context = stream_context_create(array('http' => array('timeout' => 5)));
    if (!empty($ip = json_decode(@file_get_contents($url, 0, $context)))) {
        if ((string)$ip->code == '1') {
            return false;
        }
        $data = (array)$ip->data;
    } else {
        $ip = json_decode(@file_get_contents($urls));
        if ((string)$ip->ret == 0) {
            return false;
        }
        $data = array(
            'country' => $ip->country,
            'region' => $ip->province,
            'city' => $ip->city,
            'isp' => $ip->isp,
        );
    }
    return $data;
}

给我留言

您必须 [ 登录 ] 才能发表留言!

×