javascript - una - ¿Encontrar la ubicación del usuario utilizando jQuery/JS(sin la API de geolocalización de Google)?
obtener ubicacion con js (7)
¿Hay alguna manera de encontrar una ubicación de clientes en un sitio web utilizando solo jQuery? Por ejemplo, si un usuario visita mi sitio, ¿cómo podría averiguar cuál es su ubicación aproximada usando jQuery? Por ejemplo, si un usuario proviene de San Francisco CA, tendría algún tipo de identificador que me permita saber que el usuario proviene de San Francisco CA. Realmente no necesitaría su ubicación exacta solo el condado o el área general de origen.
edición: ¿Cómo se genera la información en http://flourishworks-webutils.appspot.com/req ?
Gracias
Cualquier opción del lado del cliente no es una buena idea, ya que las proporciona la computadora en función de las redes inalámbricas cercanas. Apuesto a que el 90% de los usuarios de escritorio no tienen esta función activada. Cuando llegue a un sitio web que desea su ubicación, debe hacer clic en un botón para aceptar. Si acaban de ingresar a su sitio web, primero quieren saber por qué necesita su ubicación.
Una buena manera es mostrarles una página para informarles por qué necesita su ubicación y que nunca la usará para ningún otro propósito que el especificado, y la ubicación no se guardará en su base de datos.
Si hay un script que ejecuta el lado del servidor, entonces hay una conexión desde el cliente al servidor. En este caso el servidor debe conocer la dirección IP. Hay un truco que puedes hacer para obtener la dirección IP primero.
Haga un script php en su servidor, que solo devolverá la dirección IP. Dado que el jquery se procesa localmente, cuando se realiza una conexión al servidor, se revelará la dirección IP del cliente. Tomará un tiempo adicional para hacer las conexiones necesarias, pero pronto la dirección IP estará disponible en jQuery.
Luego, puede llamar a través de jquery una API externa que le dará información para esa dirección IP específica. Ya sea que compre una base de datos IP y la instale en su servidor web para que pueda llamarla, o bien use otra API. Puede consultar http://www.ipgp.net/ip-address-geolocation-api/
Esto es posible con https://ip-api.io geo location API. Proporciona país, ciudad, código postal, coordenadas, red, ASN, zona horaria. Por ejemplo con jQuery:
$(document).ready( function() {
$.getJSON("http://ip-api.io/api/json",
function(data){
console.log(data);
}
);
});
También https://ip-api.io comprueba las bases de datos TOR, proxy público y spammer y también proporciona esta información.
Ejemplo de respuesta:
{
"ip": "182.35.213.213",
"country_code": "US",
"country_name": "United States",
"region_code": "CA",
"region_name": "California",
"city": "San Francisco",
"zip_code": "94107",
"time_zone": "America/Los_Angeles",
"latitude": 32.7697,
"longitude": -102.3933,
"suspicious_factors": {
"is_proxy": true,
"is_tor_node": true,
"is_spam": true,
"is_suspicious": true // true if any of other fields (is_proxy, is_tor_node, is_spam) is true
}
}
La API de geolocalización HTML5 le permite obtener la latitud / longitud de un usuario con algún JavaScript (si el navegador es compatible y si el usuario permite el acceso a su ubicación).
Luego, puede realizar reverse-geocode la ubicación para obtener una dirección, hay varios servicios gratuitos de geocodificación inversa distintos de la API de Google.
Sin embargo, si no necesita una ubicación precisa y si desea que todos sus usuarios aprovechen la función (sin importar el navegador), y si no quiere preguntarles si permiten que su sitio tenga su ubicación , Recomendaría usar la IP de su usuario para obtener la ubicación .
Para obtener la dirección IP del cliente y el nombre del país en jQuery:
$.getJSON("http://freegeoip.net/json/", function(data) {
var country_code = data.country_code;
var country = data.country_name;
var ip = data.ip;
var time_zone = data.time_zone;
var latitude = data.latitude;
var longitude = data.longitude;
alert("Country Code: " + country_code);
alert("Country Name: " + country);
alert("IP: " + ip);
alert("Time Zone: " + time_zone);
alert("Latitude: " + latitude);
alert("Longitude: " + longitude);
});
$.get("http://freegeoip.net/json/", function (response) {
$("#ip").html("IP: " + response.ip);
$("#address").html("Location: " + response.city + ", " + response.region_name);
$("#details").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h3>Client side IP geolocation using <a href="http://freegeoip.net">freegeoip.net</a></h3>
<hr/>
<div id="ip"></div>
<div id="address"></div>
<hr/>Full response: <pre id="details"></pre>
Puede usar un servicio web que admita JSONP, como mi servicio http://ipinfo.io . Le proporcionará la dirección IP, el nombre de host, la información de geolocalización y el propietario de la red del cliente. Aquí hay un ejemplo de ello en acción con jQuery:
$.get("http://ipinfo.io", function(response) {
$("#ip").html(response.ip);
$("#address").html(response.city + ", " + response.region);
}, "jsonp");
Aquí hay un ejemplo más detallado de JSFiddle que también imprime la información de respuesta completa, para que pueda ver todos los detalles disponibles: http://jsfiddle.net/zK5FN/2/
Creé la API de ipdata.co para proporcionar una solución sólida a esto, vea el siguiente violín para jugar. Devuelve numerosos puntos de datos útiles, como - ubicación: país (nombre y código), región, ciudad, etc., comercio electrónico - código de moneda, símbolo de moneda, zona horaria, datos del operador de telefonía móvil y detecta si la dirección IP es un Proxy o un usuario Tor. .
Ipdata tiene 10 puntos finales globales cada uno capaz de manejar> 10,000 solicitudes por segundo.
Esta respuesta utiliza una clave de API de ''prueba'' que es muy limitada y solo para probar algunas llamadas. Regístrese para obtener su propia clave de API gratuita y reciba hasta 1500 solicitudes diarias para el desarrollo.
$.get("https://api.ipdata.co?api-key=test", function (response) {
$("#ip").html("IP: " + response.ip);
$("#city").html(response.city + ", " + response.region);
$("#response").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1><a href="https://ipdata.co">ipdata.co</a> - IP geolocation API</h1>
<div id="ip"></div>
<div id="city"></div>
<pre id="response"></pre>
Vea el violín en https://jsfiddle.net/ipdata/6wtf0q4g/922/
**jQuery(document).ready(function($) {
jQuery.getScript(''http://www.geoplugin.net/javascript.gp'', function()
{
var country = geoplugin_countryName();
var zone = geoplugin_region();
var district = geoplugin_city();
console.log("Your location is: " + country + ", " + zone + ", " + district);
});
});
<script language="JavaScript" src="http://www.geoplugin.net/javascript.gp" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function($) {
alert("Your location is: " + geoplugin_countryName() + ", " + geoplugin_region() + ", " + geoplugin_city());
});
</script>
/*--------------------------------detailed function list not necessarily to be included---------
function geoplugin_city() { return ''Dobroyd Point'';}
function geoplugin_region() { return ''New South Wales'';}
function geoplugin_regionCode() { return ''02'';}
function geoplugin_regionName() { return ''New South Wales'';}
function geoplugin_areaCode() { return ''0'';}
function geoplugin_dmaCode() { return ''0'';}
function geoplugin_countryCode() { return ''AU'';}
function geoplugin_countryName() { return ''Australia'';}
function geoplugin_continentCode() { return ''OC'';}
function geoplugin_latitude() { return ''-33.873600'';}
function geoplugin_longitude() { return ''151.144699'';}
function geoplugin_currencyCode() { return ''AUD'';}
function geoplugin_currencySymbol() { return ''&#36;'';}
function geoplugin_currencyConverter(amt, symbol) {
if (!amt) { return false; }
var converted = amt * 0.9587170632;
if (converted <0) { return false; }
if (symbol === false) { return Math.round(converted * 100)/100; }
else { return ''&#36;''+(Math.round(converted * 100)/100);}
return false;
}
*/
//----------------example-----------------------//
<html>
<head>
<script language="JavaScript" src="http://www.geoplugin.net/javascript.gp" type="text/javascript"></script>
</head>
<body>
<script language="Javascript">
document.write("Welcome to our visitors from "+geoplugin_city()+", "+geoplugin_countryName());
</script>
</body>
</html>