Geografische Informationen kostenlos von einer IP-Adresse abrufen

❥ Sponsor

Angenommen, Sie müssen wissen, aus welchem ​​Land jemand, der Ihre Website besucht, stammt, weil Sie eine internationalisierte Website haben und je nach Land unterschiedliche Dinge anzeigen. Sie könnten den Benutzer fragen. Möglicherweise möchten Sie diese Funktionalität ohnehin haben, um sicherzustellen, dass Ihre Besucher die Kontrolle haben, aber sie werden es sicherlich zu schätzen wissen, wenn es von Anfang an so korrekt wie möglich ist.

Es gibt keine nativen Webtechnologien, die diese Informationen haben. JavaScript verfügt über Geolocation, aber Benutzer müssten dem zustimmen, und selbst dann müssten Sie eine Bibliothek verwenden, um die Koordinaten in ein besser nutzbares Land umzuwandeln. Selbst serverseitige Sprachen, die Zugriff auf die IP-Adresse haben, den JavaScript nicht hat, wissen nicht automatisch das Herkunftsland.

KANADA. ICH WILL EINFACH WISSEN, OB SIE AUS KANADA SIND ODER NICHT.

Sie müssen einen Dienst abfragen, der dies weiß. Die IP Geolocation API ist dieser Dienst, und er ist kostenlos.

Sie führen einen GET gegen die API aus. Sie können dies direkt im Browser tun, wenn Sie es testen möchten

https://api.ipgeolocationapi.com/geolocate/184.149.48.32

Aber Sie erhalten nicht nur das Land. Sie erhalten eine ganze Reihe von Informationen, die Sie möglicherweise verwenden müssen. Ich sitze zufällig in Kanada und das ist es, was ich für meine IP bekomme

{ 
   "continent":"North America",
   "address_format":"{{recipient}}\n{{street}}\n{{city}} {{region_short}} {{postalcode}}\n{{country}}",
   "alpha2":"CA",
   "alpha3":"CAN",
   "country_code":"1",
   "international_prefix":"011",
   "ioc":"CAN",
   "gec":"CA",
   "name":"Canada",
   "national_destination_code_lengths":[ 
      3
   ],
   "national_number_lengths":[ 
      10
   ],
   "national_prefix":"1",
   "number":"124",
   "region":"Americas",
   "subregion":"Northern America",
   "world_region":"AMER",
   "un_locode":"CA",
   "nationality":"Canadian",
   "postal_code":true,
   "unofficial_names":[ 
      "Canada",
      "Kanada",
      "Canadá",
      "カナダ"
   ],
   "languages_official":[ 
      "en",
      "fr"
   ],
   "languages_spoken":[ 
      "en",
      "fr"
   ],
   "geo":{ 
      "latitude":56.130366,
      "latitude_dec":"62.832908630371094",
      "longitude":-106.346771,
      "longitude_dec":"-95.91332244873047",
      "max_latitude":83.6381,
      "max_longitude":-50.9766,
      "min_latitude":41.6765559,
      "min_longitude":-141.00187,
      "bounds":{ 
         "northeast":{ 
            "lat":83.6381,
            "lng":-50.9766
         },
         "southwest":{ 
            "lat":41.6765559,
            "lng":-141.00187
         }
      }
   },
   "currency_code":"CAD",
   "start_of_week":"sunday"
}

Mit diesen Informationen könnte ich leicht entscheiden, auf die kanadische Version meiner Website umzuleiten, wenn ich eine habe, oder Preise in CAD anzuzeigen, oder eine französische Übersetzung anzubieten oder was auch immer mir sonst noch einfällt.

Angenommen, Sie wären in PHP. Sie könnten die IP so abrufen...

function getUserIpAddr() {
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
    $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}

Der cURL-Aufruf, um die Informationen zu erhalten

$url = "https://api.ipgeolocationapi.com/geolocate/184.149.48.32"; 
$ch = curl_init();  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
$result = curl_exec($ch); 

Es kommt als JSON zurück, also

$json = json_decode($result);

Und dann wird $json->{'name'}; „Canada“ sein, wenn ich in Kanada bin.

Also kann ich so machen

if ($json->{'name'} == "Canada") {
  // serve index-ca.php
} else {
  // server index.php
}