API de Geolocalização do Google IP

Existe alguma maneira de usar alguma das APIs do Google para obter a geolocalização IP do meu Utilizador em tempo real?

Eu acho que ele vai usar a base de Dados Analytics e esse é o único, que rastreia o meu usuário ao nível da cidade que realmente está correto (qualquer outro IP-Location-API que eu poderia testar mostra o meu endereço IP quase 200km de distância da minha localização real. O Google mostra 200m(!) away!)

quero saber a localização do meu Utilizador (no lado do navegador e transmiti - la para o meu servidor ou no servidor para servir conteúdo dependente da cidade. Mas eu não quero que meus usuários um desses pop ups irritantes pedindo para usar GPS, então eu quero usar o endereço IP.

Alguma sugestão?

Author: udondan, 2012-12-10

3 answers

Se não quiser usar a base de dados GeoIP do estilo HTML5, activada pelo cliente, irá precisar de uma base de dados GeoIP como a base de dados GeoIP Lite do MaxMind, que é gratuita e funciona bem para 99% dos casos de Utilização. Qualquer outro serviço com informações mais precisas/detalhadas vai custar-lhe muito dinheiro. MaxMind é elogiado por muitas pessoas e funciona bem para as minhas necessidades, pessoalmente. Pode dar-lhe informações sobre o país/região/cidade/Latitude-Longitude-coordenadas/Continente.

 10
Author: Sherif, 2012-12-10 01:12:23

Você pode usar a API geocoding do Google para obter um endereço real para um local, mas as entradas necessárias para essa API são as coordenadas de latitude e longitude.

Exemplo: http://maps.googleapis.com/maps/api/geocode/json?latlng=43.473,-82.533 & sensor = falso

Você precisa encontrar e IP para a API de localização de algum outro fornecedor para chegar a um nível da cidade ou manter a opção de pedir-lhes para lhe conceder acesso para a sua geolocalização.

O IPInfoDB faz um bom trabalho em reduzir automaticamente a localização através de IP sem utilizar a entrada:

Http://ipinfodb.com/ip_location_api.php

 0
Author: Kartik, 2012-12-10 01:12:03

Pode usar a API de geolocalização da Google para obter o lat e o lon com base no endereço IP do utilizador:

  function findLatLonFromIP() {
    return new Promise((resolve, reject) => {
      $.ajax({
        url: `https://www.googleapis.com/geolocation/v1/geolocate?key=${friendlyPix.IpFilter.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);
        },
      });
    });
  }

Então você pode usar estas coordenadas para obter o endereço do usuário usando a API geocoding. Aqui está um exemplo que retorna o país:

  function getCountryCodeFromLatLng(lat, lng) {
    return new Promise((resolve, reject) => {
      $.ajax({
        url: `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${friendlyPix.IpFilter.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);
        },
      });
    });
  }

Acima, basta olhar através do data.results para encontrar a informação que você precisa (Cidade, Rua, país, etc...) Use estas duas funções em conjunto:

findLatLonFromIP().then((latlng) => {
  return getCountryCodeFromLatLng(latlng.lat, latlng.lng);
}).then((countryCode) => {
  console.log('User\'s country Code:', countryCode);
});
 0
Author: Nicolas Garnier, 2018-05-28 18:58:16