November 12, 2019

Получите географическую информацию с 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

}