Как я могу проанализировать выходные данные из API геолокации HostIP? - PullRequest
2 голосов
/ 28 марта 2011

Если я получаю доступ к API геолокации HostIP через http://api.hostip.info/get_html.php?ip=193.148.1.1,, он возвращает три строки текста:

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

Как мне проанализировать этот вывод в PHP для извлечения названия страны?

Ответы [ 6 ]

3 голосов
/ 28 марта 2011

Попробуйте эти 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 голос
/ 28 марта 2011

Вы можете получить XML-ответ от hostip.info, если используете следующий URL:

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

вместо:

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

Затем вы можете анализировать XML, который является более чистым, чем Regex, и, вероятно, более невосприимчивым к возможным изменениям форматирования вывода.

Это пример анализа вывода:

$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;
1 голос
/ 28 марта 2011

Может ли помочь какое-нибудь регулярное выражение для 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)
0 голосов
/ 01 декабря 2014
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';
}
0 голосов
/ 29 августа 2013

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

{"название страны": "VENEZUELA", "код страны": "VE", "город": "Каракас", "ip": "xxx.xx.xxx.xx", "ш": "x.xxx", "LNG": "- xx.xxxx"}

0 голосов
/ 28 марта 2011

только для страны: http://api.hostip.info/country.php?ip=193.148.1.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...