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.326
89
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:
Discussioni simili
Autore Titolo Forum Risposte Data
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
M Classe in php 4 per generare file in Excel PHP 4
L php tinymce mi duplica la classe label PHP 3
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
tucu49 PHP include classe PHP 8
M [PHP] Estendere Connessione a una Classe PHP 1
M [PHP] utilizzo di una classe e delle sue funzioni PHP 2
D [PHP] assegnare una classe PHP 1
W [PHP] Creazione classe PDO PHP 4
D [PHP] chiamata metodi da una classe PHP 3
L [PHP] login con la classe medoo.in PHP 5
M [wordpress-galleria immagini]Inserire classe php in html PHP 0
L [PHP] Classe che non vede i suoi metodi PHP 3
C [PHP] Metodo di una classe in sltra classe PHP 1
V [PHP] utilizzo di metodi statici in altra classe PHP 5
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
M Assegnare un id o classe a una variabile php PHP 5
C Leggere variabili esterne ad una classe in php 5.2 PHP 6
J [risolto] Trasformare la seguente classe PHP PHP 2
J Creare una classe view php PHP 0
criric Classe php la gestione delle visite Snippet PHP 6
T Classe php e proprieta predefinite PHP 8
catellostefano CLASSE PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource PHP 2
L [PHP] istanziare una classe ? PHP 2
G aiuto con classe template php PHP 1
catellostefano Problema con la classe class.phpmailer.php PHP 5
J classe php sbilenca PHP 17
F Problema con la classe zip php PHP 9
A include in classe PHP PHP 3
P jButton1ActionPerformed passare parametri ad altra classe Java 2
L creare oggetti da una classe tramite un form Javascript 0
A Riproduzione classe Vector C/C++ 3
O Estendere una rete di classe C Reti LAN e Wireless 1
tritabit Classe MysqliDb mancante nelle librerie arc2 PHP 2
S Copiare attributi da una classe. Programmazione 0
B [Javascript] Cambiare classe ed aggiornare relativi eventi Javascript 3
A [Javascript] Mancata aggiunta di una classe al click Javascript 1
Shyson [WordPress] Mettere classe css WordPress 0
Sevenjeak [C#] Aiuto esportazione tema su libreria di classe ( dll ) .NET Framework 1
C Classe Prenotazione con 2 scelte Java 2
A modificare .jar con classe personalizzata Java 9
Rikk73 Passare come argomento in un metodo un parametro della classe istanziata PHP 0
M Visualizzare da una classe esistente ogni profilo utente PHP 1
napuleone Modificare attributi di una classe con js Javascript 2
C Upload immagini con classe non funzionante PHP 1
A chiamate con istanza di altra classe rispetto la classe di app. (plugin) PHP 1
M aggiungere classe al click Javascript 1
P Inserire classe su script Google Analitics Magento 0
N Dare id ad elementi classe jQuery 1
otto9due Postare tweet con immagine cosa aggiungere a questa classe? PHP 0

Discussioni simili