Sempre più spesso è richiesto una profilazione del visitatore delle pagine web. Ci sono tanti script nei vari linguaggi lato server ma trovo questa tecnica, basata su un servizio di terze parti, assai utile perché scritta direttamente in javascript e con l’unico supporto di jquery.

Tramite l’URL http://freegeoip.net/json/xxx.xxx.xxx.xxx (dove le x indicano l’indirizzo IP del quale si richiede la georeferenziazione) è possibile ottenere i dati per la georeferenziazione in formato json. Se però non si invia nessun indirizzo IP, viene preso quello della pagina che contiene la richiesta. In questo modo la richiesta alla risorsa http://freegeoip.net/json/ permetterà di ottenere le informazioni sull’IP e la georeferenziazione dello stesso.

Inviata la richiesta si ottiene per risposta un oggetto json che ha la seguente forma:

{“ip”:”80.86.49.118″,”country_code”:”IT”,”country_name”:”Italy”,”region_code”:”42″,”region_name”:”Liguria”,”city”:”La Spezia”,”zip_code”:”19100″,”time_zone”:”Europe/Rome”,”latitude”:44.1167,”longitude”:9.8333,”metro_code”:0}

Per concludere un esempio di codice per raggiungere lo scopo che ci siamo prefissi interpretando il json di ritorno:

<!DOCTYPE html>
<html>
<head>
	<meta name="viewport" content="width=device-width" />
	<title>TestIP</title>
	<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
	crossorigin="anonymous"></script>
</head>
	<body>
		<div>
			<label>
				Your IP: <span id="ipSpan"></span>
			</label>
		</div>
		<div>
			<label>
				Your Country: <span id="ipCountry"></span>
			</label>
		</div>
		<div>
			<label>
				Your position: <span id="ipGPS"></span>
			</label>
		</div>
		<div>
			<button onclick="getGeoFromIP()">
				Test your IP
			</button>
		</div>
		<script>
			function getGeoFromIP() {
				jQuery.ajax({
					url: 'http://freegeoip.net/json/',
					method: "GET",
					async: false
				})
				.done(function (data) {
					var ip = data.ip;
					$("#ipSpan").html(ip);
					var coutryCode = data.country_code;
					var countryName = data.country_name;
					$("#ipCountry").html("[" + coutryCode + "] " + countryName);
					var lat = data.latitude;
					var lon = data.longitude;
					$("#ipGPS").html("latitude: " + lat + " - longitude: " + lon);
				})
				.fail(function () {
				});
			}
		</script>
	</body>
</html>
Working example: