2012-01-30 17 views
2

IPアドレスに従って、DBユーザーの一般的な領域/場所に保存するために、hostipを使用しようとしています。しかし、私が受け取っている出力からどのようにデータを解析するかわかりません。あなたは、私がデータを受信して​​いますどのようにここで見ることができますIPアドレスに基づいてDBに場所を保存

<?php 
     $ip = $_SERVER['REMOTE_ADDR']; 
     $data = json_decode(file_get_contents("http://api.hostip.info/get_html.php?ip=$ip")); //<-not sure how 
     $country = $data['Country']; 
     $city = $data['City']; 
    ?> 

http://api.hostip.info/get_html.php?ip=00.0.00.00

別のオプションは、(ipinfodbを使用して)、ここで最初の答えを使用していた:Getting location details from IP in PHPが、それもすべてのデータが表示されません、私のIPをURLに挿入しようとしても、結果を解析するだけではなく、上記に変更しました。

答えて

5

したがって、ipinfodbによれば、APIキーにサインアップする必要があります。しかし彼らはあなたがprotected $apiKey = '';あなたのAPIキーを与えた後、API classgetCountry($host)は、その国を取得します。また、XMLやJSON APIを使用することもできます。

UPDATE 1

それとも、それはあなたのためにあまりにも難しい場合は、その後、他のサービスで改行区切り(\ n)で爆発を使用します。あるいは、おそらく別のサービスを使用します。

UPDATE 2

は質問で述べたgeoPlugin、リンクされたが、APIキーを必要としないようです。使用するコードはecho var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip)));です。

+0

[OK]を情報column.more情報から取得した配列を普遍関数を使用することができ、私は今ことを試してみましたが、それはまだ動作していません...上記のコードと同じコードを以下のように変更しています: '$ iplookup =" http://api.ipinfodb.com/v3/ip-city/?key= &ip = $ ip "; $ data = json_decode(file_get_contents($ iplookup)); $ country = $ data ['CountryCode']; $ city = $ data ['CityName'];しかし、まだ私はデータを取得していません。それぞれの "O"と "O"のみ –

+0

geoPluginを試してみてください。 – axiomer

+0

さて、これを試しましたが、まだ動作していません...これは私が使用しているコードです: '$ data = var_export(unserialize(file_get_contents(" http://www.geoplugin.net/php.gp ?ip = $ ip "))); $ country = $ data ['geoplugin_countryCode']; $ city ['geoplugin_city']; ' –

0

改行記号の区切り文字で配列に分割し、一連の文字列マニピュレータでスクラブすることもできます。または、データをjsonとして返すサービスを見つけることができます。そのすべてを通して

+0

クール、あなたはそれをjsonとして返すサービスを知っていますか? –

+0

はい、ここにあるJSON API:http://ipinfodb.com/ip_location_api_json.php –

+0

パートa:サンプルコードを表示/リンクできますか?パートb:上のaxiomerに私のコメントを参照してください、私はそこにjsonを取得していますが、まだそれは動作していません... –

1

与えられた結果がオブジェクトまたは配列ではないため、単に$ data ['country']を使用しても機能しません。コンテンツを配列に分割するか、さらにはJSONオブジェクトとして取得してから使用する必要があります。

$data = json_decode($data); 

配列内のデータを取得するには、次のようにします。

これにもかかわらず、私は信じられないほど不正確であるため、IPアドレスからロケーションを取得することは勧めません!これは、必ずしもユーザーの所在地ではなく、ホストサーバーの場所を返します。

EDIT:

JSON APIを使用してください:http://ipinfodb.com/ip_location_api_json.php

アップデート:ここでAPIキーを

  1. 登録:JSON APIを実装する

    手順:http://ipinfodb.com/register.php。これによりサーバーから結果を取得できますが、これを実行しても機能しません。

コピーして、次のPHPコードを通り過ぎ:

// Set the parameters 
$ip_address = $_SERVER['REMOTE_ADDR']; 
$api_key = 'YOUR_API_KEY_HERE'; 

// Get the data 
$data = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=$api_key&ip=$ip_address&format=json"); 

// Decode the JSON result into an array 
$data = json_decode($data); 

// All data can now be accessed using the associative array $data 
$country = $data['Country']; // Country 
$city = $data['City']; // City 
+0

私は正確な場所、したがって、私は今のところIPアドレスを使用しています –

+0

それは地域のためにも正確ではありません。私のIPはマンチェスターとして登場しました。私は200マイル以上離れています! –

+0

素晴らしい!それは私たちの目的にとっては偉大なものです。 –

0

はあなたが作ることができ

  • あなたはあなたが必要とする必要があるすべてはこれです、この作業を取得するために、任意のSDKを実装する必要はありませんこのような配列:

    array(
        array(
         'ip' => '0.0.0.0', 
         'country' => 'someplace', 
         'city' => 'somecity'm , 
         'data' => 'somedata'), 
        array(
         'ip' => '0.0.0.0', 
         'country' => 'someplace', 
         'city' => 'somecity'm , 
         'data' => 'somedata'), 
    . 
    . 
    .); 
    

    して、配列をシリアライズし、データベース内のIPアドレスを経由して、それを保存して、あなただけの2テーブルの列を持っている:

    ip ::: info 
    

    、あなたがDBからデータを取得し、約php serialze

  • 関連する問題