web-dev-qa-db-fra.com

API de géolocalisation IP de Google

Existe-t-il un moyen d'utiliser les API Google pour obtenir la géolocalisation IP de mon utilisateur en temps réel?

Je pense qu’il utilisera la base de données Analytics et c’est le seul qui permette de suivre mon utilisateur au niveau de la ville, ce qui est en fait correct (toute autre API IP-Location-API que je pourrais tester affiche mon adresse IP à environ 200 km de mon emplacement réel. Google le montre à 200m (!)!

Je souhaite connaître l'emplacement de mon utilisateur (côté navigateur et le transmettre à mon serveur ou côté serveur) pour servir le contenu dépendant de la ville. Mais je ne veux pas donner à mes utilisateurs l'un de ces pop-ups gênants demandant l'utilisation du GPS, alors je veux utiliser l'adresse IP.

Aucune suggestion?

10
keykiller91

Si vous ne souhaitez pas utiliser informations GeoIP activées par le client de style HTML5 , vous aurez besoin d'une base de données GeoIP telle que la base de données GeoIP Lite de MaxMind , qui est gratuite et fonctionne bien dans 99% des cas d'utilisation. . Tout autre service avec des informations plus précises/détaillées vous coûtera beaucoup d'argent. MaxMind est loué par beaucoup de gens et fonctionne bien pour mes besoins, personnellement. Il peut vous donner des informations de pays/région/ville/latitude-longitude-coordonnées/continent.

10
Sherif

Vous pouvez utiliser l'API de géocodage de Google pour obtenir une adresse réelle pour un emplacement, mais les entrées requises pour cette API sont les coordonnées de latitude et de longitude.

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

Vous devez rechercher et utiliser l’API de localisation d’API auprès d’un autre fournisseur pour accéder au niveau de la ville ou conserver l’option Leur demander de vous accorder l’accès pour leur géolocalisation.

IPInfoDB fait un très bon travail en réduisant automatiquement l'emplacement via IP sans entrée d'utilisation:

http://ipinfodb.com/ip_location_api.php

0
Kartik

Vous pouvez utiliser l'API de géolocalisation de Google pour obtenir les lat et lon en fonction de l'adresse IP de l'utilisateur:

  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);
        },
      });
    });
  }

Vous pouvez ensuite utiliser ces coordonnées pour obtenir l'adresse de l'utilisateur à l'aide de l'API de géocodage. Voici un exemple qui renvoie le pays:

  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);
        },
      });
    });
  }

Ci-dessus, il suffit de regarder dans le data.results pour trouver les informations dont vous avez besoin (Ville, Rue, Pays, etc.). Utilisez les deux fonctions ci-dessus ensemble:

findLatLonFromIP().then((latlng) => {
  return getCountryCodeFromLatLng(latlng.lat, latlng.lng);
}).then((countryCode) => {
  console.log('User\'s country Code:', countryCode);
});
0
Nicolas Garnier