2010-06-27 5 views
5

Wie würde ich Regex verwenden, um die Informationen über eine IP Location APIPHP Regex für IP Location API

Dies ist die API

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

ich das Land Namen bekommen müsste lernen , Region/Bundesland und Stadt.

Ich versuchte dies:

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

Wenn ich echo $ regex tun immer FAIL bekomme ich, wie kann ich diese

Antwort

3

Wie Aaron vorgeschlagen hat. Am besten nicht das Rad neu zu erfinden, so versuchen Sie es Parsen mit 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); 

Sie können nun Zugriff auf jeden Teil des $ xml Variable als ein Objekt, mit dem in Bezug ist hier ein Beispiel von dem, was Sie auf dem Laufenden.

<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> 

Jetzt, nachdem Sie diesen XML-String in den simplexml_load_string geladen haben() können Sie die IP-Antwort-Adresse wie so zugreifen.

simplexml_load_string() wandelt wohlgeformte XML-Dateien in ein Objekt um, das Sie bearbeiten können. Das einzige, was ich sagen kann, ist es gehen und ausprobieren und mit ihm spielen

EDIT:

Quelle http://www.php.net/manual/en/function.simplexml-load-string.php

+1

Oder einfach: '$ xml = simplexml_load_file ($ url);' – salathe

+0

Semantik ;-) es war das einzige wirklich funktionierende Beispiel, das ich herumgelegt hatte – WarmWaffles

2

fix wirklich Sie sind besser dran, einen XML-Parser mit Hilfe der Informationen zu ziehen.

Zum Beispiel wird this script es in ein Array analysieren.

Regex sollte wirklich nicht verwendet werden, um HTML oder XML zu analysieren.

+0

Bitte poste ein Beispiel! – xZerox

+0

Für Sie aktualisiert. =) –

1

Wenn Sie wirklich reguläre Ausdrücke verwenden müssen, dann sollten Sie das korrigieren Sie benutzen. "|<CountryName>([^<]*)</CountryName>|i" würde besser funktionieren.

+0

Wie von anderen berichtet, würde ich lieber keine regulären Ausdrücke zum Parsen von HTML verwenden, XHTML oder XML, wenn nicht in bestimmten Fällen. Ich musste schnell überprüfen, ob der zurückgegebene XML-Inhalt ein Tag enthielt, und ich verwendete einen regulären Ausdruck. In anderen Fällen ist es viel besser, SimpleXML zu verwenden, wenn das zurückgegebene XML nicht zu groß ist. – kiamlaluno