Php 如何解析HostIP';s地理定位API?

Php 如何解析HostIP';s地理定位API?,php,parsing,geolocation,Php,Parsing,Geolocation,如果我通过访问HostIP geolocation API,它将返回三行文本: Country: SPAIN (ES) City: (Unknown city) IP: 193.148.1.1 如何用PHP解析输出以提取国家名称?尝试这些preg\u匹配 $info = "Country: SPAIN (ES) City: (Unknown city) IP: 193.148.1.1"; preg_match("/Country: (.*)\n/", $info, $out); echo $

如果我通过访问HostIP geolocation API,它将返回三行文本:

Country: SPAIN (ES)
City: (Unknown city)
IP: 193.148.1.1
如何用PHP解析输出以提取国家名称?

尝试这些preg\u匹配

$info = "Country: SPAIN (ES)
City: (Unknown city)
IP: 193.148.1.1";

preg_match("/Country: (.*)\n/", $info, $out);
echo $out[1];

## OR
preg_match ("/Country: (.*) \(.*\)?\n/", $info, $out);
echo $out[1];

仅限国家:

是否需要一些regex for PHP帮助

if (preg_match('/Country: (.*[^\n\r])/i', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}

You will have: 

Match 1: Country: SPAIN (ES)
Group 1: SPAIN (ES)

如果使用以下URL,则可以从hostip.info获取XML响应:

http://api.hostip.info/?ip=193.148.1.1

而不是:

http://api.hostip.info/get_html.php?ip=193.148.1.1

然后,您可以解析XML,它比正则表达式更干净,并且可能对输出格式的可能更改更免疫

这是解析输出的一个示例:

$response = file_get_contents('http://api.hostip.info/?ip=193.148.1.1');

$xml = new DOMDocument();
$xml->loadXml($response);

$xpath = new DOMXpath($xml);

$path = '/HostipLookupResultSet/gml:featureMember/Hostip/';

$ip = $xpath->evaluate($path . 'ip')->item(0)->nodeValue;
$city = $xpath->evaluate($path . 'gml:name')->item(0)->nodeValue;
$countryName = $xpath->evaluate($path . 'countryName')->item(0)->nodeValue;
$countryAbbrev = $xpath->evaluate($path . 'countryAbbrev')->item(0)->nodeValue;


{“国家名称”:“委内瑞拉”,“国家代码”:“VE”,“城市”:“加拉加斯”,“ip”:“xxx.xx.xxx.xx”,“lat”:“x.xxx”,“lng”:“-xx.xxxx”}

重复?不是真的,他有一个,只是需要一种方法来解析它。尽管他可能应该检查这个问题(可能已经有了替代解决方案)。请添加一些注释,说明您的代码如何回答这个问题。
function _get_country_from_IP($ip) {
  $data = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
  return $country = isset($data->country) ? $data->country : 'UNKNOWN';
}