我正在使用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
需要一些帮助吗?
答案 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。