Регулярное выражение PHP для API IP-адреса для определения местоположения


Как бы я использовал регулярное выражение для получения информации об IP-адресе в API местоположения

Это API

Http://ipinfodb.com/ip_query.php?ip=74.125.45.100

Мне нужно было бы получить название страны, региона/штата и города.

Я попробовал это:

$ip = $_SERVER["REMOTE_ADDR"];
$contents = @file_get_contents('http://ipinfodb.com/ip_query.php?ip=' . $ip . '');
$pattern = "/<CountryName>(.*)<CountryName>/";
preg_match($pattern, $contents, $regex);
$regex = !empty($regex[1]) ? $regex[1] : "FAIL";
echo $regex;

Когда я выполняю регулярное выражение echo $, я всегда получаю СБОЙ, как я могу это исправить

Author: Aaron Harun, 2010-06-27

3 answers

Как и предложил Аарон. Лучше не изобретать велосипед, поэтому попробуйте проанализировать его с помощью simplexml_load_string()

// Init the CURL
$curl = curl_init();

// Setup the curl settings
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0);

// grab the XML file
$raw_xml = curl_exec($curl);

curl_close($curl);

// Setup the xml object
$xml = simplexml_load_string( $raw_xml );

Теперь вы можете получить доступ к любой части переменной $xml в качестве объекта, в связи с чем вот пример того, что вы опубликовали.

<Response> 
    <Ip>74.125.45.100</Ip> 
    <Status>OK</Status> 
    <CountryCode>US</CountryCode> 
    <CountryName>United States</CountryName> 
    <RegionCode>06</RegionCode> 
    <RegionName>California</RegionName> 
    <City>Mountain View</City> 
    <ZipPostalCode>94043</ZipPostalCode> 
    <Latitude>37.4192</Latitude> 
    <Longitude>-122.057</Longitude> 
    <Timezone>0</Timezone> 
    <Gmtoffset>0</Gmtoffset> 
    <Dstoffset>0</Dstoffset> 
</Response> 

Теперь, после того как вы загрузили эту XML-строку в simplexml_load_string(), вы можете получить доступ к IP-адресу ответа следующим образом.

$xml->IP;

Simplexml_load_string() преобразует правильно сформированные XML-файлы в объект, который вы можете манипулировать. Единственное, что я еще могу сказать, это пойти, попробовать и поиграть с ним

РЕДАКТИРОВАТЬ:

Источник http://www.php.net/manual/en/function.simplexml-load-string.php

 3
Author: WarmWaffles, 2010-06-27 01:44:07

Вам действительно лучше использовать анализатор XML для извлечения информации.

Например, этот скрипт проанализирует его в массив.

Регулярное выражение действительно не следует использовать для анализа HTML или XML.

 2
Author: Aaron Harun, 2010-06-27 01:35:56

Если вам действительно нужно использовать регулярные выражения, то вам следует исправить то, которое вы используете. "|<CountryName>([^<]*)</CountryName>|i" будет работать лучше.

 1
Author: kiamlaluno, 2010-06-27 01:55:58