https://github.com/solidsnk86/geo_api
Aplicación para geolocalización por IP o coordenadas
https://github.com/solidsnk86/geo_api
express nodejs supabase-db
Last synced: 5 months ago
JSON representation
Aplicación para geolocalización por IP o coordenadas
- Host: GitHub
- URL: https://github.com/solidsnk86/geo_api
- Owner: solidsnk86
- License: mit
- Created: 2024-12-25T23:44:20.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-08-12T18:47:27.000Z (5 months ago)
- Last Synced: 2025-08-12T20:33:11.144Z (5 months ago)
- Topics: express, nodejs, supabase-db
- Language: JavaScript
- Homepage: https://solid-geolocation.vercel.app
- Size: 962 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# API de Geolocalización
## Descripción
Esta aplicación está construida utilizando Node.js y Express. Proporciona un servicio de geolocalización que devuelve datos de ubicación en formato JSON.
## Características
- **Limitador de Tasa**: La aplicación incluye un limitador de tasa para controlar el número de solicitudes realizadas al endpoint, asegurando un uso justo y previniendo abusos.
## Endpoint
- **GET /location**: Este endpoint devuelve un objeto JSON que contiene información de geolocalización basada en la dirección IP del usuario.
## Ejemplo de Respuesta
```json
{
"ip": "192.168.1.1",
"ciudad": {
"nombre": "Lima",
"códigoPostal": "15001"
},
"país": {
"nombre": "Perú",
"alpha": "PE",
"emojiBandera": "🇵🇪",
"zonaHoraria": "UTC-5"
},
"coordenadas": {
"latitud": -12.0464,
"longitud": -77.0428
},
"infoDelSistema": {
"idioma": "es-PE",
"sistema": "Windows",
"navegadorWeb": {
"navegador": "Chrome",
"versión": "138.0.4515.107"
}
}
}
```
## Cómo Usar la API
Para utilizar la API de geolocalización, realiza una solicitud GET a la siguiente URL:
```bash
https://solid-geolocation.vercel.app/location
```
Puedes hacer un `fetch` a este endpoint utilizando JavaScript de la siguiente manera:
```javascript
;(async () => {
const obtenerUbicacion = async () => {
try {
const res = await fetch('https://solid-geolocation.vercel.app/location')
if (!res.ok) throw new Error('Respuesta fallida' + res.statusText)
const datos = await res.json()
return datos
} catch (err) {
console.error('Error:', err)
}
}
const json = await obtenerUbicacion()
console.log(json)
})()
```
- Python:
```python
import requests
def obtener_ubicacion() -> list | None:
try:
response = requests.get("https://solid-geolocation.vercel.app/location")
if response.ok:
data = response.json()
return data
else:
raise ValueError(f"Error {response.status_code}: {response.text}")
except Exception as e:
print(f"HTTP {e}")
if __name__ == "__main__":
json = obtener_ubicacion()
print(json)
```
- Python Asíncrono
```python
import asyncio
import httpx
async def obtener_ubicacion():
async with httpx.AsyncClient() as client:
res = await client.get("https://solid-geolocation.vercel.app/location")
datos = res.json()
return datos
if __name__ == "__main__":
json = asyncio.run(main=obtener_ubicacion())
print(json)
```
La respuesta será un objeto JSON similar al ejemplo anterior.
## Uso del end-point por coordenadas
Para utilizar la API de geolocalización, mediante coordenadas tenés que realizar una solicitud GET a la siguiente url:
```bash
https://solid-geolocation.vercel.app/geolocation?lat=&lon=
```
Para poder hacer uso de éste end-point, se deberá proveer los parmámetros de latitud y longitud. Desde el front-end podemos hacer uso de la api del navegador de geolocalización y realizar el fecth a dicho end-point, dejo éste ejemplo de como podría implementarse:
```javascript
async function getCurrentLocation() {
return await new Promise((resolve, reject) => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition((position) => {
const coords = {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
}
resolve(coords)
})
} else {
reject(new Error('El navegador no soporta la geolocalización'))
}
})
}
async function getApiDataLocation({ latitude, longitude }) {
return await fetch(
`https://solid-geolocation.vercel.app/geolocation?lat=${latitude}&lon=${longitude}`
)
.then((res) => res.json())
.then((data) => data)
.catch((error) => console.log(error.message))
}
const coords = await getCurrentLocation()
const data = await getApiDataLocation({
latitude: coords.latitude,
longitude: coords.longitude,
})
console.log(JSON.stringify(data, null, 2))
```
## La respuesta:
```json
{
"ip": "192.168.0.254",
"city": "La Toma",
"type": "Ciudad",
"departament": "Coronel Pringles",
"state": "San Luis",
"country": "Argentina",
"centerSquare": "0.057mts",
"coordinates": {
"latitude": -33.0551991251609,
"longitude": -65.6178979076542
},
"closestAirport": {
"iata": "LUQ",
"name": "Brigadier Mayor D Cesar Raul Ojeda Airport",
"city": "San Luis",
"state": "San-Luis",
"country": "AR",
"distance": "73.022mts"
}
}
```
Puedes saber a que distancia estás del aeropuerto más cercano y la plaza entral de la ciudad.
🌍 Vista en vivo de la web api: https://solid-geolocation.vercel.app/location
---
@solidSnk86 - 2024