5

正規表現を使用してIPtoLocationAPIに関する情報を取得するにはどうすればよいですか

これは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;

$ regexをエコーすると、常にFAILが発生します。これを修正するにはどうすればよいですか?

4

3 に答える 3

3

アーロンが示唆したように。車輪の再発明をしないのが最善なので、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

于 2010-06-27T01:44:07.883 に答える
2

XMLパーサーを使用して情報を取得することをお勧めします。

たとえば、このスクリプトはそれを配列に解析します。

正規表現は、実際にはHTMLまたはXMLの解析に使用すべきではありません。

于 2010-06-27T01:35:56.763 に答える
1

本当に正規表現を使用する必要がある場合は、使用している正規表現を修正する必要があります。"|<CountryName>([^<]*)</CountryName>|i"うまくいくでしょう。

于 2010-06-27T01:55:58.793 に答える