Classe PHP per la Geolocalizzazione del visitatore

Ti è piaciuta questa classe?

  • SI

    Voti: 1 50,0%
  • Più o meno

    Voti: 0 0,0%
  • Non saprei

    Voti: 0 0,0%
  • NO

    Voti: 1 50,0%

  • Votanti
    2

macus_adi

Utente Attivo
5 Dic 2017
1.266
82
48
IT/SW
Salve a tutti è il primo post che creo, quindi scusate l'imprecisione...
Piccola classe per gestire la provenienza di un determinato indirizzo IP (più o meno diciamo)...

Questa ha lo scopo di effettuare dei filtri in base alle proprietà passate al costruttore, restituendo un bool...

PHP:
<?php
/**
 * Created by PhpS.
 * User: Marco Arena Di R.
 * Date: 23/02/2018
 * Time: 08:05
 * Class Geocode
 * Ha lo scopo di fornire uno strato di comunicazione con un servizio gratuito per ottenere informazioni inierenti
 * l'indirizzi IP del visitatore dell'aaplicazione sul quale viene installato
 * @author Marco Arena Di R.
 * @license GPL
 * @copyright 2018 Madi-Solution
 * @version 1.0.0
 */
class Geocode{
 
    /**
     * Indirizzo Servizio Esterno
     * @var string
     */
    private $service='http://freegeoip.net/json/';

    /**
     * Indirizzo IP Client
     * @var string
     */
    private $ip_request='0.0.0.0';

    /**
     * Risposta
     * @var array
     */
    private $response=[];

    /**
     * Codice stati abilitati a visualizzare il contenuto X
     * @var array
     */
    private $filter=['IT'];

    /**
     * Attiva il filtro sul campo stato enable, può essere modificato con uno dei parametri
     * "ip","country_code","country_name","region_code","region_name","city","zip_code","time_zone","latitude","longitude","metro_code"
     * @var string
     */
    private $property_filter='state_enable';

    /**
     * Proprietà per applicare il filtro di visualizzazione
     * @var bool
     */
    public $view=FALSE;

    /**
     * Geocode constructor.
     * @param array $property Array associativo con chiavi i nomi delle proprietà della classe. Se vuoto utilizza i parametri di default.
     */
    public function __construct($property=[])
    {
        $this->ip_request=$_SERVER['REMOTE_ADDR'];
        if(!empty($property)){
            foreach ($property as $k=>$v){
                $this->$k=$v;
            }
        }
    }


    /**
     * Inizializza la richiesta solo se è stato valorizzato correttamente l'indirizzo ip del visitatore,
     * nel caso contrario i valori presenti saranno tutti null...
     * @see $this->model_response();
     * @return $this
     */
    public function init_(){
        if($this->ip_request!='0.0.0.0')$this->response=json_decode(file_get_contents($this->service.$this->ip_request));
        $this->model_response();
        return $this;
    }

    /**
     * Effettua il filtro su country_code, è possibile modificare il country code con qualsiasi proprierà dell'oggetto risposta
     * @return $this
     */
    public function check_permision(){
        if(empty($this->filter)){

            if(property_exists($this->response,$this->property_filter)){

                if($this->response->$this->property_filter!=NULL && in_array($this->response->$this->property_filter,$this->filter)) $this->view=TRUE;
                else $this->view=FALSE;
            }
        }$this->view=TRUE;

        return $this;
    }

    /**
     * Setta correttamente la risposta anche nel caso in cui sia vuota valorizzando tutte le proprierà a NULL
     */
    private function model_response(){
        $model=['ip','country_code','country_name','regione_code','region_name','city','zip_code','time_cone','latitude','longitude','metro_code'];
        if(empty($this->response)){
            $this->response=new stdClass();
            foreach ($model as $items){
                $this->response->$items=NULL;
            }
        }
    }


    /**
     * Metodo per ottenere il codice della nazione del cliente
     * @return mixed
     */
    public function get_country(){
        return (property_exists($this->response,'country_code') ? $this->response->country_code : '');
    }

    /**
     * Metodo per ottenere il noome della nazione
     * @return mixed
     */
    public function get_country_name(){
        return (property_exists($this->response,'country_name') ? $this->response->country_name : '');

    }

    /**
     * Metodo per avere il codice della regione
     * @return mixed
     */
    public function get_regione_code(){
        return $this->response->region_code;
    }

    /**
     * Metodo per avere il nome della regione
     * @return mixed
     */
    public function get_region_name(){
        return $this->response->region_name;
    }

    /**
     * Metodo per avere in output un valore valido dalla risposta del servizio
     * @param string $param Uno dei parametri della risposta     "ip",    "country_code",    "country_name",    "region_code",    "region_name",    "city",    "zip_code",    "time_zone",    "latitude",    "longitude",    "metro_code"
     * @return mixed
     */
    public function free_param($param='country_code'){
        return $this->response->$param;
    }

}
Naturalmente per utilizzarla nel caso più banale è possibile inizializzarla in questo modo....
PHP:
$geocode=new Geocode();
if($geocode->init_()->check_permision()->view)echo 'Abilitato';
else echo 'Non abilitato';
/**
* Per ottenere Nome della nazione
*/
$nome_nazione=$geocode->get_country_name();
/**
* Ottiene il codice della Nazione
*/
$codice_nazione=$geocode->get_country();
/**
* Ottiene il nome della regione
*/
$nome_regione=$geocode->get_region_name();
/**
* Ottiene il codice della Regione
*/
$codice_regione=$geocode->get_regione_code();
/**
* Ottiene il nome della città di appartenenza
*/
$city=$geocode->free_param('city');

/**
* In alternativa può essere usata in questo modo
*/
$geocode=new Geocode();
$codice_regione=$geocode->init_()->get_regione_code();
...etc etc
 
Ultima modifica: