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 1 Visitante 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: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

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 @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login:)

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.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

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 /////