Получите географическую информацию с IP-адреса бесплатно
Скажем, вам нужно знать, из какой страны кто-то посещает ваш сайт, потому что у вас есть интернационализированный сайт и отображать различные вещи, основанные на этой стране. Вы можете спросить пользователя. Вы можете захотеть иметь эту функциональность в любом случае, чтобы убедиться, что ваши посетители имеют контроль, но, конечно, они оценят его просто правильно из ворот, в меру своих возможностей.
Нет никаких собственных веб-технологий, которые имеют эту информацию. JavaScript имеет геолокацию, но пользователи должны были бы одобрить это, и даже тогда вам пришлось бы использовать некоторую библиотеку для преобразования координат в более удобную страну. Даже внутренние языки, которые имеют доступ к IP-адресу Таким образом, что JavaScript этого не делает, не просто автоматически знают страну происхождения.
КАНАДА. Я ПРОСТО ХОЧУ ЗНАТЬ, ИЗ КАНАДЫ ОНИ ИЛИ НЕТ.
Вы должны попросить какую-то услугу, которая знает это. IP Geolocation API - это такая услуга, и она бесплатна.
Вы выполняете GET против API . Вы можете сделать это прямо в браузере, Если вы хотите, чтобы проверить его:
https://api.ipgeolocationapi.com/geolocate/184.149.48.32
Но вы не просто получаете страну. Вы получаете целую кучу информации, которую вам может понадобиться использовать. Я случайно сижу в Канаде, и это то, что я получаю за свой IP:
{
"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"
}
С этой информацией я мог бы легко решить перенаправить на канадскую версию моего веб-сайта, если у меня есть один, или показать цены в CAD, или предложить французский перевод, или все остальное, что я могу придумать.
Допустим, вы были на PHP . Вы могли бы получить IP, как...
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;
}
Завиток, чтобы получить информацию:
$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);
Он возвращается как JSON, так что:
$json = json_decode($result);
И тогда $json->{'name'};
будет "Канада", если я буду в Канаде.
Так что я могу сделать как:
if ($json->{'name'} == "Canada") {
// serve index-ca.php
} else {
// server index.php
}