ipinfo.io过滤AS #### out?

时间:2014-12-18 23:23:26

标签: php regex json api

我正在使用ipinfo.io进行一些简单的查找,但我对echo $details->org;有一个小问题它输出“ AS15169 Google Inc. ”,但我只想要ISP部分所以“ Google Inc. ”。

示例代码:

<?
function ip_details($ip) {
    $json = file_get_contents("http://ipinfo.io/{$ip}");
    $details = json_decode($json);
    return $details;
}
$details = ip_details($_SERVER['REMOTE_ADDR']);
echo $details->org;
?>

示例输出:http://ipinfo.io/8.8.8.8/org

需要一些帮助吗?

2 个答案:

答案 0 :(得分:0)

使用正则表达式查找以AS开头并且有一个或多个数字后跟空格的字边界之间的任何内容,然后将其替换为空字符串。

我对正则表达式并不是很好,所以有人可能会提供更好的解决方案。但是我在PHP Live Regex进行了测试,它适用于我尝试过的少数测试用例。

<?
function ip_details($ip) {
    $json = file_get_contents("http://ipinfo.io/{$ip}");
    $details = json_decode($json);
    return $details;
}
$details = ip_details($_SERVER['REMOTE_ADDR']);
$org = preg_replace('/\bAS\d+\s\b/i', '', $details->org);
echo $org;
?>

答案 1 :(得分:0)

如果你只想要org字段,你可以查询http://ipinfo.io/{$ip}/org,它会给你一个字符串组织,这将使你不必解析任何JSON:

$org = file_get_contents("http://ipinfo.io/{$ip}/org");

我们可以通过在第一个空格上爆炸来将组织字符串拆分为ASN并命名:

list($asn, $name) = explode(" ", $org, 2);

把它们放在一起我们得到:

function org_name($ip) {
    $org = file_get_contents("http://ipinfo.io/{$ip}/org");
    list($asn, $name) = explode(" ", $org, 2);
    return $name;
}

echo org_name("8.8.8.8");
// => Google Inc.
echo org_name("189.154.55.170");
// => Uninet S.A. de C.V.
echo org_name("172.250.147.230");
// => Time Warner Cable Internet LLC

有关不同端点和速率限制的详细信息,请参阅http://ipinfo.io/developers