如何解析HostIP的地理定位API的输出?

时间:2011-03-27 20:39:50

标签: php parsing geolocation

如果我通过http://api.hostip.info/get_html.php?ip=193.148.1.1访问HostIP地理位置API,则会返回三行文字:

Country: SPAIN (ES)
City: (Unknown city)
IP: 193.148.1.1

如何在PHP中解析该输出以提取国家/地区名称?

6 个答案:

答案 0 :(得分:3)

试试这些preg_matches

$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];

答案 1 :(得分:1)

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)

答案 2 :(得分:1)

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

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

而不是:

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

然后,您可以解析比Regex更清晰的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;

答案 3 :(得分:0)

答案 4 :(得分:0)

http://api.hostip.info/get_json.php?position=true

{ “COUNTRY_NAME”: “委内瑞拉”, “COUNTRY_CODE”: “VE”, “城市”: “加拉加斯”, “IP”: “xxx.xx.xxx.xx”, “LAT”:“x.xxx ”, “LNG”: “ - xx.xxxx”}

答案 5 :(得分:0)

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';
}