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/