API геолокации Google IP
Можно ли использовать какой-либо из API Google для получения IP-геолокации моего пользователя в режиме реального времени?
Я думаю, что он будет использовать базу данных Analytics, и это единственное, что на самом деле отслеживает моего пользователя на уровне города (любой другой IP-Location-API, который я могу проверить, показывает мой IP-адрес, расположенный почти в 200 км от моего реальное местоположение. Google показывает это 200 м (!) прочь!)
Я хочу узнать местоположение моего пользователя (на стороне браузера и передать его на свой сервер или на стороне сервера), чтобы обслуживать контент, зависящий от города. Но я не хочу, чтобы мои пользователи стали одним из этих раздражающих всплывающих окон с просьбой использовать GPS, поэтому я хочу использовать IP-адрес.
Любые предложения?
Ответы
Ответ 1
Если вы не хотите использовать информацию о GeoIP с поддержкой клика HTML5 с клиентом, вам понадобится база данных GeoIP, например база данных MaxMind GeoIP Lite, которая бесплатна и хорошо работает для 99% случаев использования. Любая другая услуга с более точной/подробной информацией будет стоить вам больших денег. MaxMind - это похвала многих людей и хорошо работает для моих нужд лично. Он может предоставить вам информацию о стране/регионе/городе/широте-долготе-координатах/континентах.
Ответ 2
Вы можете использовать API геолокации Google, чтобы получить широту и долготу на основе IP-адреса пользователя:
var apiKey = "Your Google API Key";
function findLatLonFromIP() {
return new Promise((resolve, reject) => {
$.ajax({
url: 'https://www.googleapis.com/geolocation/v1/geolocate?key=${apiKey}',
type: 'POST',
data: JSON.stringify({considerIp: true}),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: (data) => {
if (data && data.location) {
resolve({lat: data.location.lat, lng: data.location.lng});
} else {
reject('No location object in geolocate API response.');
}
},
error: (err) => {
reject(err);
},
});
});
}
Затем вы можете использовать эти координаты, чтобы получить адрес пользователя с помощью API геокодирования. Вот пример, который возвращает страну:
function getCountryCodeFromLatLng(lat, lng) {
return new Promise((resolve, reject) => {
$.ajax({
url: 'https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}',
type: 'GET',
data: JSON.stringify({considerIp: true}),
dataType: 'json',
success: (data) => {
console.log('reverse geocode:', data.results[0].address_components);
data.results.some((address) => {
address.address_components.some((component) => {
if (component.types.includes('country')) {
return resolve(component.short_name);
}
});
});
reject('Country not found in location information.');
},
error: (err) => {
reject(err);
},
});
});
}
Выше просто просмотрите data.results
чтобы найти нужную информацию (город, улица, страна и т.д.). Используйте эти две функции вместе:
findLatLonFromIP().then((latlng) => {
return getCountryCodeFromLatLng(latlng.lat, latlng.lng);
}).then((countryCode) => {
console.log('User\ country Code:', countryCode);
});
Ответ 3
Вы можете использовать API геокодирования Google, чтобы получить реальный адрес для местоположения, но входы, необходимые для этого API, - это координаты широты и долготы.
Пример:
http://maps.googleapis.com/maps/api/geocode/json?latlng=43.473,-82.533&sensor=false
Вам нужно найти и IP-адрес API местоположения от какого-либо другого поставщика, чтобы перейти на уровень города или оставить запрос, чтобы они предоставили вам доступ к своей геолокации.
IPInfoDB выполняет довольно хорошую работу при автоматическом сужении местоположения через IP без использования ввода:
http://ipinfodb.com/ip_location_api.php
Ответ 4
Для этого лучше использовать базу данных maxmind или использовать API определения местоположения IP, например, https://ipwhois.io/