Question

Je dois montrer différents liens pour les visiteurs américains et non-américains sur mon site. Ceci est pour plus de commodité seulement, donc je ne suis pas à la recherche d'un degré très haute précision et la sécurité ou l'usurpation d'identité ne sont pas une préoccupation.

Je sais qu'il ya des services GÉOCIBLAGE et des listes, mais cela semble exagéré puisque j'ai besoin seulement de déterminer (à peu près) si la personne est aux États-Unis ou non.

Je pensais à l'aide de JavaScript pour obtenir le fuseau horaire de l'utilisateur, mais cela semble ne donner l'offset, afin que les utilisateurs au Canada, au Mexique et en Amérique du Sud auraient la même valeur que les gens aux États-Unis.

Y at-il d'autres éléments d'information disponibles soit en JavaScript ou PHP, court de saisir l'adresse IP et de faire une recherche pour déterminer cela?

Était-ce utile?

La solution

Il y a des services gratuits là-bas qui vous permettent de faire le pays et la géolocalisation IP du côté client.

Je l'ai utilisé wipmania service JSONP gratuit, il est vraiment simple à utiliser:

<script type="text/javascript">
  // plain JavaScript example
  function jsonpCallback(data) { 
    alert('Latitude: ' + data.latitude + 
          '\nLongitude: ' + data.longitude + 
          '\nCountry: ' + data.address.country); 
  }
</script>
<script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
        type="text/javascript"></script>

Ou si vous utilisez un cadre qui prend en charge JSONP, comme jQuery, vous pouvez:

// jQuery example
$.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) { 
  alert('Latitude: ' + data.latitude + 
        '\nLongitude: ' + data.longitude + 
        '\nCountry: ' + data.address.country); 
});

Vérifier l'extrait ci-dessus en cours d'exécution .

Autres conseils

Le meilleur indicateur est probablement l'en-tête HTTP Accept-Language. Il ressemblera à quelque chose comme ci-dessous dans la requête HTTP:

GET / HTTP/1.1
Accept: */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; MDDC; OfficeLiveConnector.1.4; OfficeLivePatch.0.0; .NET CLR 3.0.30729)
Accept-Encoding: gzip, deflate
Host: www.google.com
Connection: Keep-Alive

Vous devriez être en mesure de récupérer ce en PHP en utilisant les éléments suivants:

<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>

Je dirais que geotargetting est la seule méthode qui est même à distance fiable. Mais il y a aussi des cas où il ne permet pas du tout. Je continue de recevoir des sites qui pensent que je suis en France parce que l'épine dorsale est là de mon entreprise et l'ensemble du trafic Internet passe par elle.

La tête HTTP Accept ne suffit pas pour déterminer les paramètres régionaux utilisateur. Il ne vous indique ce que l'utilisateur a sélectionné comme leur langue, qui peut avoir rien à voir avec où ils sont. En savoir plus sur cette .

Selon le pays que vous souhaitez distinguer, les fuseaux horaires peuvent être un moyen très facile à réaliser - et je suppose qu'il est tout à fait fiable que la plupart des gens auront les horloges sur leurs ordinateurs Un bon jeu. (Même si bien sûr il y a beaucoup de pays, vous ne pouvez pas distinguer en utilisant cette technique).

Voici un exemple très simple de la façon de le faire:

http://unmissabletokyo.com/country-detector

Wipmania.com & PHP

<?php
$site_name = "www.your-site-name.com";

function getUserCountry() {
    $fp = fsockopen("api.wipmania.com", 80, $errno, $errstr, 5);
    if (!$fp) {
        // API is currently down, return as "Unknown" :(
        return "XX";
    } else {
        $out = "GET /".$_SERVER['REMOTE_ADDR']."?".$site_name." HTTP/1.1\r\n";
        $out .= "Host: api.wipmania.com\r\n";
        $out .= "Typ: php\r\n";
        $out .= "Ver: 1.0\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            $country = fgets($fp, 3);
        }
        fclose($fp);
        return $country;
    }
}
?>

@rostislav

ou en utilisant cURL:

public function __construct($site_name) {
    // create a new cURL resource
    $ch = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_URL, "http://api.wipmania.com".$_SERVER['REMOTE_ADDR']."?".$site_name);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    // grab URL and pass it to the browser
    $response = curl_exec($ch);
    $info = curl_getinfo($ch,CURLINFO_HTTP_CODE);

    if (($response === false) || ($info !== 200)) {
        throw new Exception('HTTP Error calling Wipmania API - HTTP Status: ' . $info . ' - cURL Erorr: ' . curl_error($ch));
    } elseif (curl_errno($ch) > 0) {
        throw new Exception('HTTP Error calling Wipmania API - cURL Error: ' . curl_error($ch));
    }

    $this->country = $response;

    // close cURL resource, and free up system resources
    curl_close($ch);
}

Ma solution, simple et petit, dans cet exemple, je teste la région du Canada de fr-CA or en-CA langue

if( preg_match( "/^[a-z]{2}\-(ca)/i", $_SERVER[ "HTTP_ACCEPT_LANGUAGE" ] ) ){

   $region = "Canada";

}

Il suffit que nous pouvons utiliser l'API hostip

<?php $country_code = file_get_contents("http://api.hostip.info/country.php"); <br/>if($country_code == "US"){ echo "You Are USA"; } <br/>else{ echo "You Are Not USA";} ?>

Tous les codes de pays sont ici .. http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top