Is there any way to use any of the Google APIs to get the IP Geolocation of my User in Live time?
I think it will use the Analytics Database and that is the only one, that tracks my user at city level that actually is correct (Any other IP-Location-API that I could test shows my IP address nearly 200km away from my real location. Google shows it 200m(!) away!)
I want to know the Location of my User (At Browser side and transmit it to my Server or at Server side) to serve City dependent content. But I don't want to get my users one of these annoying pop ups asking for using GPS, so I want to use the IP address.
Any suggestions?
If you don't want to use HTML5 style client-enabled GeoIP information, you are going to need a GeoIP database like MaxMind's GeoIP Lite database, which is free and works well for 99% of use cases. Any other service with more accurate/detailed information is going to cost you a lot of money. MaxMind is praises by many people and works well for my needs, personally. It can give you Country/Region/City/Latitude-Longitude-Coordinates/Continent information.
You can use Google's geolocation API to get the lat and lon based on the user's IP address:
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);
},
});
});
}
Then you can use these coordinates to get the address of the user using the geocoding API. Here is an example that returns the country:
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);
},
});
});
}
Above, just look through the data.results
to find the information you need (City, Street, Country etc...)
Use these two functions above together:
findLatLonFromIP().then((latlng) => {
return getCountryCodeFromLatLng(latlng.lat, latlng.lng);
}).then((countryCode) => {
console.log('User\'s country Code:', countryCode);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With