Underc0de

Programación Scripting => Python => Mensaje iniciado por: PeterParker en Julio 12, 2020, 05:56:27 PM

Título: Script para la geolocalización por IP con Python
Publicado por: PeterParker en Julio 12, 2020, 05:56:27 PM
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) [Seleccionar]

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: https://www.geeksacademy.site/2020/07/ipgeopy-geolocalizacion-por-ip-con.html

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

Título: Re:Script para la geolocalización por IP con Python
Publicado por: ??????? en Julio 12, 2020, 07:51:03 PM
Buenas @PeterParker (https://underc0de.org/foro/index.php?action=profile;u=109765)!  :)

He visto varios errores en tu código.

Para empezar, si quiere mostrar todos estos valores:


Código (python) [Seleccionar]

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) [Seleccionar]

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) [Seleccionar]

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.

http://www.utic.edu.py/citil/images/Manuales/Python_para_todos.pdf

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) [Seleccionar]

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
Título: Re:Script para la geolocalización por IP con Python
Publicado por: bronymaricon en Julio 15, 2020, 07:46:57 PM
waw muy bueno!! gracias!!