Classe PHP per la Geolocalizzazione del visitatore

Discussione in 'Snippet PHP' iniziata da macus_adi, 24 Febbraio 2018.

Tag (etichette):
?

Ti è piaciuta questa classe?

  1. SI

    0 valutazioni
    0,0%
  2. Più o meno

    0 valutazioni
    0,0%
  3. Non saprei

    0 valutazioni
    0,0%
  4. NO

    1 valutazioni
    100,0%
  1. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.000
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    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: 24 Febbraio 2018
Sto caricando...
Discussioni simili - Classe PHP Geolocalizzazione
  1. tucu49
    Risposte:
    8
    Visite:
    372
  2. mau90
    Risposte:
    1
    Visite:
    133
  3. mau90
    Risposte:
    2
    Visite:
    137
  4. domenicotd
    Risposte:
    1
    Visite:
    199
  5. webfra01
    Risposte:
    4
    Visite:
    291

Condividi questa Pagina