【问题标题】:How to use ipinfodb to find country code only如何使用 ipinfodb 仅查找国家代码
【发布时间】:2012-12-01 10:33:01
【问题描述】:

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

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

OK;;<Some_IP>;US;UNITED STATES

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

问候, 提摩太

编辑:

回复查尔斯,

在 google 上搜索后,我知道 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 参数的情况下获得相同的输出?

谢谢

【问题讨论】:

  • 感谢您的回复。我已经通过 XML 参数获得了所需的输出。但是如果没有额外的论点,我怎么能得到它呢? (新代码已添加到我的帖子中)
  • 编写从 API 获得的 XML 会更容易。然后我们可以帮助你。将您的示例放在首位,我们无法运行您的 API 调用。

标签: php ip-geolocation


【解决方案1】:

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

改为这样做

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

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

所以...

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

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

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

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

【讨论】:

    【解决方案2】:
    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
    

    您不妨查看string manipulation functions 的其余部分,看看是否还有其他您可能遗漏的有趣内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2017-01-05
      • 2020-03-19
      相关资源
      最近更新 更多