Php 如何解析HostIP';s地理定位API?
如果我通过访问HostIP geolocation 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 $
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';
}