Archive for the ‘geolocation’ Category

Classe para buscar dados de GeoLocalização

Wednesday, May 27th, 2009

Buenas pessoal, depois de um tempo meio sem tempo pra postar, mudança nas prioridades e tudo mais, o Doctrine acabou ficando para um pouco depois, mas para cortar o silêncio que aqui se instaurou, vou aproveitar e postar uma classe na qual montei agora, muito simples, usa a API de um webservice gratuito de busca de dados de Geolocalização, bem simples mas pra mim ficou eficiente e rápido, espero que gostem.

<?php
/**
 * Classe para busca de dados de geolocalização
 * utiliza um webservice gratuito do iplocationtools.com
 * utilizando o formato json como padrão, por ser mais leve e ágil para tratar
 * @author André Gustavo Espeiorin <andregustavodocaqui@gmail.com>
 * @version 1.0
 * @package X
 *
 */
class X_Location
{
	/**
	 * Formato Padrão
	 * @var <string>
	 * @access private
	 */
	private $_format = 'json';

	/**
	 * Endereço inicial para a pesquisa
	 * @var <string>
	 * @access private
	 */
	private $_queryUrl = 'http://iplocationtools.com/ip_query.php?ip=';

	/**
	 * Objecto de consulta do CURLs
	 * @var <object>
         * @access private
	 */
	private $_ch;

	/**
	 * Dados tratados
	 * @var <array>
	 * @access private
	 */
	private $_data;

	/**
	 * Construtor da Classe, recebe o parrametro <string> format
	 * Caso o paramêtro não seja passado, usa o padrão do sistema
	 * @return <void>
	 */
	public function __construct()
	{
		$this->_ch = curl_init();
	}

	/**
	 * Método que faz a consulta e tratamento dos dados, recebe o ip
	 * a ser consultado como parâmetro
	 * @param $ip
	 * @return <boolean>
	 */
	public function getData($ip)
	{
		if( isset($ip) && !empty($ip) ){
			curl_setopt($this->_ch, CURLOPT_URL, $this->_queryUrl . $ip . '&output=' . $this->_format);
			curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($this->_ch, CURLOPT_TIMEOUT, 15);

			$request = curl_exec($this->_ch);
			if( isset($request) && !empty($request) ){
				$this->_data = json_decode($request, true);
				return true;
			} else{
				return false;
			}
		} else{
			return false;
		}
	}

	/**
	 * Método utilizado para pegar os dados de _data, caso o keyName seja ignorado, retorna o array inteiro
	 * Aqui eu listo as chaves que podem ser buscadas:
	 * -Ip
	 * -Status
	 * -CountryCode
	 * -CountryName
	 * -RegionCode
	 * -RegionName
	 * -City
	 * -ZipPostalCode
	 * -Latitude
	 * -Longitude
	 * @param $paramName
	 * @return <array> | <string>
	 */
	public function get($keyName='')
	{
		if( isset($keyName) && !empty($keyName) ){
			return $this->_data[$keyName];
		}else{
			return $this->_data;
		}
	}

}

Show, se a classe parece simples, imagine seu uso, abaixo pequeno exemplo:

$gl = new X_Location();
$gl->getData('seuIp');
echo $gl->get('City');
// ou
var_dump($gl->get());

Bom, espero que seja útil a todos, agradeço sua visita!

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb
Clicky Web Analytics