PHP Regex для IP для определения местоположения API - PullRequest
5 голосов
/ 27 июня 2010

Как бы я использовал Regex для получения информации об 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 $ regex, я всегда получаю FAIL, как я могу это исправить

Ответы [ 3 ]

3 голосов
/ 27 июня 2010

Как предположил Аарон. Лучше не изобретать колесо, поэтому попробуйте разобрать его с помощью 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-файлы в объект, которым вы можете манипулировать. Единственное, что я могу сказать, это пойти и попробовать и поиграть с ним

EDIT:

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

2 голосов
/ 27 июня 2010

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

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

Regex действительно не следует использовать для разбора HTML или XML.

1 голос
/ 27 июня 2010

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

...