hostip.info API响应数据提取

时间:2011-01-28 10:02:06

标签: php regex

我目前正在尝试提取以下API调用的值: http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true

结果应该是类似的数组:

$my = array(
    'country_name' => 'UNITED STATES',
    'country_iso' => 'US',
    'city_name' => 'Sugar Grove, IL',
    'latitude' => 41.7696,
    'longitude' => -88.4588
);

任何人都有一个聪明的正则表达式来实现这一目标吗?

提前致谢!

3 个答案:

答案 0 :(得分:4)

$response = file('http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true');
foreach ($response as $line) {
    $line = trim($line);
    if (!empty($line)) {
        $parts = explode(': ', $line);
        $array[$parts[0]] = $parts[1];
    }
}

print_r($array);

输出:

Array
(
    [Country] => UNITED STATES (US)
    [City] => Sugar Grove, IL
    [Latitude] => 41.7696
    [Longitude] => -88.4588
    [IP] => 12.215.42.19
)

答案 1 :(得分:2)

Country: (.*?) \((.*?)\)\nCity: ([^\n]*)\n\nLatitude: ([-0-9.]*)\nLongitude: ([-0-9.]*)\n

但最好使用许多正则表达式:

Country: (.*?) \(([^\n]*)\)
City: ([^\n]*)
Latitude: ([-0-9.]*)
Longitude: ([-0-9.]*)

答案 2 :(得分:1)

无法发表评论。

@Dan Grossman - 我的2美分:将FILE_SKIP_EMPTY_LINES和/或FILE_IGNORE_NEW_LINES标志添加到file()函数中,这样您就不需要检查空行了。

我会使用非正则表达式版本。