Script para la geolocalización por IP con Python

Iniciado por PeterParker, Julio 12, 2020, 05:56:27 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Hola amigos del internet. Quiero mostrarle un script que realice hace mucho tiempo y lo publicque en un blog recientemente. Es muy interesante y me hace pensar en todo lo que saben las grandes empresas hoy en día. Pueden saber mucho con nuestra IP. Ya sin mucha explicación aquí el script.

Código: python

import requests
import json

# URL de la API
api_url = "http://ip-api.com/json/"

# Definimos los parametros de respuesta que queremos obtener
parametros = 'status,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,query'
data = {"fields":parametros}

def ip_scraping(ip=""):
# Nos conectamos con la API
res = requests.get(api_url+ip, data=data)
# Obtenemos y procesamos la respuesta JSON
api_json_res = json.loads(res.content)
return api_json_res

if __name__ == '__main__':
# Solicitamos la entrada
ip = input("Ingrese la dirección IP: ")

# Llamamos a la función ip_scraping y mostramos los resultados
par = parametros.split(",")
for x in par:
print(x.upper(), ":")
print(ip_scraping(ip)[x])
print("\n")



Si quieres, puedes ver como funciona el código en tiempo real en linea. Te dejo el link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Les agradecería mucha si me dan su opinión. Alguna sugerencia.


Julio 12, 2020, 07:51:03 PM #1 Ultima modificación: Julio 12, 2020, 07:54:03 PM por Kirari
Buenas @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:)

He visto varios errores en tu código.

Para empezar, si quiere mostrar todos estos valores:


Código: python

parametros = 'status,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,query'
data = {"fields":parametros}


Entonces, realmente no hace falta que hagas un string con los mismos, lo mismo va para la variable data, ya que al hacer la petición, basta con enviarle la misma IP y nada más.

En la función ip_scraping, si *ip=""* quiere decir que al ingresar nada, devuelva los datos de su propia ip, entonces, podría solo dejar el parámetro ip, ya que al concatenarla con la cadena *api_url* va a ser igual a la misma.

Luego tenemos el for:


Código: python

par = parametros.split(",")
   for x in par:
      print(x.upper(), ":")
      print(ip_scraping(ip)<ul class="bbc_list"><li type="square">)[/li][/list]
      print("\n")


En esta sección del código se itera sobre todos los valores de la lista par. Por cada iteración, se imprime el mismo objeto JSON. Y además, no sé que quiso hacer acá, además de lo dicho anteriormente, aunque lo más probable es que se haya confundido:

Código: python

print(ip_scraping(ip)<ul class="bbc_list"><li type="square">)[/li][/list]


Hay otro par de errores que mencionar, pero creo que le falta aprender un poco más sobre Python. Acá le dejo un manual que le guiará bastante a mejorar todo lo dicho.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Y además, le dejo mi versión de su código (lo hice más módular) para que lo examine. No dude en preguntar, acá estaremos para ayudarlo  ;) ;)

Código: python

import requests
import json

# URL de la API
api_url = "http://ip-api.com/json/"

# Obtener toda la informacion acerca de la IP
def get_info(ip):
    # el .decode() sirve para decodicar la cadena que está en bytes
    res = requests.get(api_url+ip).content.decode()
    return res

# Obtener objeto JSON
def get_object(request_obj):
    api_json_res = json.loads(request_obj)
    return api_json_res

# Guardar resultados
def save_results(info):
   
    # Obtener la info como un objeto
    ip_object = get_object(info)

    results = "\n"
   
    # Recorrer objeto por identificador key y almacenar en results la cadena
    for key in ip_object:
        results += key + ": " + str(ip_object[key]) + "\n"

    return results

if __name__ == '__main__':
   
    # Solicitamos la entrada
    ip = input("Ingrese la dirección IP: ")
   
    info = get_info(ip)
   
    results = save_results(info)

    # Mostrar resultados
    print (results)


Saludos!
-Kirari

waw muy bueno!! gracias!!
/////  -BR0NYHCK.bat-  tg: @bronymaricon /////