0

我想使用 ipinfodb API 查找网站访问者的国家代码。

当我尝试以下操作时http://api.ipinfodb.com/v3/ip-country/?key=<My_API_Key>&ip=<Some_IP>,它会给出以下输出:

OK;;<Some_IP>;US;UNITED STATES

如何过滤此输出以使其仅显示国家代码?

问候,蒂莫西

编辑:

回复查尔斯,

在谷歌上搜索后,我知道可以给 API 一个“格式属性为 XML”,所以下面的工作。

$xml = simplexml_load_file('http://api.ipinfodb.com/v3/ip-country/?key=<My_API>&format=xml&ip=<Some_IP>);

echo $xml->countryCode;

如何在没有 XML 参数的情况下获得相同的输出?

谢谢

4

2 回答 2

0
OK;;<Some_IP>;US;UNITED STATES

如何过滤此输出以使其仅显示国家代码?

我发现您能够调用 SimpleXML 感到很奇怪,但没有想到explode,它会将字符串转换为数组,并在给定的分隔符上拆分。在这种情况下,我们需要爆炸;

$string_data = 'OK;;127.0.0.1;US;UNITED STATES';
$sploded_data = explode(';', $string_data);
print_r($sploded_data);
echo "\nCountry code: ", $sploded_data[3], "\n";

这应该发出:

Array
(
    [0] => OK
    [1] =>
    [2] => 127.0.0.1
    [3] => US
    [4] => UNITED STATES
)
Country code: US

您可能希望查看其余的字符串操作函数,看看是否还有其他您可能遗漏的有趣内容。

于 2012-12-15T18:55:01.933 回答
0

上面的答案并不是特别有用,因为如果您每次都明确指定相同的 IP 地址,服务器输出只是静态的。如果您对特定 IP 地址的位置请求进行硬编码,则每次都将是相同的。重点是什么?

改为这样做

  • 为他们的 API 安装 PHP 类。PHP 类
  • 使用此处找到的 PHP 示例;将其保存为自己的网页并观察结果。我们称之为“userlocation.php”。请注意,如果您从 localhost 加载,这些字段将为空。

好的,解析这个输出的技巧是 array_values()。我花了很长时间才想到这一点,但最终我偶然发现了这一点

所以...

$locations = array_values($locations);
echo $locations[n],"<br />\n";
echo $locations[n+1],"<br />\n";
etc.

无论您需要什么元素,都可以通过这种方式获得——而且它是动态的。该代码将返回与用户 IP 地址相关的任何国家/地区。

最后一点。注意将您的 API 密钥粘贴到类文件中,而不是粘贴到 userlocation.php 中。类文件变量受到保护,这是一件好事。

无论如何,我不是专家;只是想我会分享我学到的东西。

于 2015-02-01T06:17:57.093 回答