svgmx5 Posted February 4, 2011 Share Posted February 4, 2011 I'm playing and testing this Script i found online that gets your location based on your IP. The location is working pretty good, however i can't seem to get it to find locations nearby, or other cities/towns nearby. I've looked over the docs provided on their website, and i'm using their php class scripts they provide but that part is not working for some reason. I'm wondering if anyone here can take a look at it or better yet if someone has actually used this before. The script is located at http://www.geoplugin.com/webservices/php And this is the class i'm using <?php class geoPlugin { //the geoPlugin server var $host = 'http://www.geoplugin.net/php.gp?ip={IP}&base_currency={CURRENCY}'; //the default base currency var $currency = 'USD'; //initiate the geoPlugin vars var $ip = null; var $city = null; var $region = null; var $areaCode = null; var $dmaCode = null; var $countryCode = null; var $countryName = null; var $continentCode = null; var $latitute = null; var $longitude = null; var $currencyCode = null; var $currencySymbol = null; var $currencyConverter = null; function geoPlugin() { } function locate($ip = null) { global $_SERVER; if ( is_null( $ip ) ) { $ip = $_SERVER['REMOTE_ADDR']; } $host = str_replace( '{IP}', $ip, $this->host ); $host = str_replace( '{CURRENCY}', $this->currency, $host ); $data = array(); $response = $this->fetch($host); $data = unserialize($response); //set the geoPlugin vars $this->ip = $ip; $this->city = $data['geoplugin_city']; $this->region = $data['geoplugin_region']; $this->areaCode = $data['geoplugin_areaCode']; $this->dmaCode = $data['geoplugin_dmaCode']; $this->countryCode = $data['geoplugin_countryCode']; $this->countryName = $data['geoplugin_countryName']; $this->continentCode = $data['geoplugin_continentCode']; $this->latitude = $data['geoplugin_latitude']; $this->longitude = $data['geoplugin_longitude']; $this->currencyCode = $data['geoplugin_currencyCode']; $this->currencySymbol = $data['geoplugin_currencySymbol']; $this->currencyConverter = $data['geoplugin_currencyConverter']; } function fetch($host) { if ( function_exists('curl_init') ) { //use cURL to fetch data $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $host); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.0'); $response = curl_exec($ch); curl_close ($ch); } else if ( ini_get('allow_url_fopen') ) { //fall back to fopen() $response = file_get_contents($host, 'r'); } else { trigger_error ('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR); return; } return $response; } function convert($amount, $float=2, $symbol=true) { //easily convert amounts to geolocated currency. if ( !is_numeric($this->currencyConverter) || $this->currencyConverter == 0 ) { trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE); return $amount; } if ( !is_numeric($amount) ) { trigger_error ('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING); return $amount; } if ( $symbol === true ) { return $this->currencySymbol . round( ($amount * $this->currencyConverter), $float ); } else { return round( ($amount * $this->currencyConverter), $float ); } } function nearby($radius=100, $limit=null) { if ( !is_numeric($this->latitude) || !is_numeric($this->longitude) ) { trigger_error ('geoPlugin class Warning: Incorrect latitude or longitude values.', E_USER_NOTICE); return array( array() ); } $host = "http://www.geoplugin.net/extras/nearby.gp?lat=" . $this->latitude . "&long=" . $this->longitude . "&radius={$radius}"; if ( is_numeric($limit) ) $host .= "&limit={$limit}"; return unserialize( $this->fetch($host) ); } } ?> and this is the actual script that echos the results <?php require_once('geoplugin.class.php'); $geoplugin = new geoPlugin(); // If we wanted to change the base currency, we would uncomment the following line // $geoplugin->currency = 'EUR'; $geoplugin->locate(); echo "Geolocation results for {$geoplugin->ip}: <br />\n". "City: {$geoplugin->city} <br />\n". "Region: {$geoplugin->region} <br />\n". "Area Code: {$geoplugin->areaCode} <br />\n". "DMA Code: {$geoplugin->dmaCode} <br />\n". "Country Name: {$geoplugin->countryName} <br />\n". "Country Code: {$geoplugin->countryCode} <br />\n". "Longitude: {$geoplugin->longitude} <br />\n". "Latitude: {$geoplugin->latitude} <br />\n". "Currency Code: {$geoplugin->currencyCode} <br />\n". "Currency Symbol: {$geoplugin->currencySymbol} <br />\n". "Exchange Rate: {$geoplugin->currencyConverter} <br />\n"; if ( $geoplugin->currency != $geoplugin->currencyCode ) { //our visitor is not using the same currency as the base currency echo "<p>At todays rate, US$100 will cost you " . $geoplugin->convert(100) ." </p>\n"; } /* find places nearby */ $nearby = $geoplugin->nearby(); if ( isset($nearby[0]['geoplugin_place']) ) { echo "<pre><p>Some places you may wish to visit near " . $geoplugin->city . ": </p>\n"; foreach ( $nearby as $key => $array ) { echo ($key + 1) .":<br />"; echo "\t Place: " . $array['geoplugin_place'] . "<br />"; echo "\t Country Code: " . $array['geoplugin_countryCode'] . "<br />"; echo "\t Region: " . $array['geoplugin_region'] . "<br />"; echo "\t County: " . $array['geoplugin_county'] . "<br />"; echo "\t Latitude: " . $array['geoplugin_latitude'] . "<br />"; echo "\t Longitude: " . $array['geoplugin_longitude'] . "<br />"; echo "\t Distance (miles): " . $array['geoplugin_distanceMiles'] . "<br />"; echo "\t Distance (km): " . $array['geoplugin_distanceKilometers'] . "<br />"; } echo "</pre>\n"; } ?> I hope someone can help me, or if you have used something better in the past let me know Quote Link to comment https://forums.phpfreaks.com/topic/226636-need-help-with-this-geolocation-ip-script/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.