Articolo originale: How to Get Location Information of an IP Address Using Python

A volte può essere utile conoscere la posizione di un indirizzo IP, sia che si tratti del tuo, sia di quello di un sito web che stai utilizzando.

Un possibile caso d'uso è quando vuoi inviare informazioni di accesso agli utenti del tuo sito.

In questo articolo vedremo come puoi ottenere la posizione di un indirizzo IP utilizzando Python.

Prepara gli strumenti

Per raggiungere questo obiettivo, useremo due API:

  1. ipify: questa API ci aiuterà a conoscere l'indirizzo IP da cui proviene la richiesta.
  2. ipapi: questa API ci fornirà informazioni sulla posizione di un determinato indirizzo IP.

Per interagire con queste API useremo la libreria  requests di Python. Se non hai familiarità con le API, assicurati di consultare questo articolo per saperne di più.

Puoi installare questa libreria usando il comando pip in questo modo:

$ pip install requests

Una volta installata la libreria, siamo pronti a partire!

Ottenere informazioni sulla posizione

Come discusso, per prima cosa otterremo il nostro indirizzo IP tramite la prima API. Poi utilizzeremo questo indirizzo IP per ricavare informazioni geografiche tramite la seconda API. Avremo quindi due funzioni:

import requests


def get_ip():
    response = requests.get('https://api64.ipify.org?format=json').json()
    return response["ip"]


def get_location():
    ip_address = get_ip()
    response = requests.get(f'https://ipapi.co/{ip_address}/json/').json()
    location_data = {
        "ip": ip_address,
        "city": response.get("city"),
        "region": response.get("region"),
        "country": response.get("country_name")
    }
    return location_data


print(get_location())

Nel codice qui sopra, abbiamo due funzioni – get_ip() e get_location(). Vediamole separatamente.

Funzione get_ip()

Secondo la documentazione dell'API ipify, dobbiamo effettuare una richiesta GET a https://api.ipify.org?format=json per ottenere una risposta JSON simile a questa:

{
  "ip": "117.214.109.137"
}

Salviamo questa risposta in una variabile response che è un dizionario Python contenente una sola coppia chiave-valore. Quindi restituiamo il valore della chiave ip usando response["ip"].

Funzione get_location()

Secondo la documentazione di ipapi, dobbiamo effettuare una richiesta GET a https://ipapi.co/{ip}/{format}/ per ottenere le informazioni sulla posizione per un particolare indirizzo IP. {ip} viene sostituito dall'indirizzo IP e {format} può essere sostituito con uno dei seguenti formati: json, jsonp, xml, csv, yaml.

Questa funzione chiama internamente la funzione get_ip() per ottenere l'indirizzo IP e poi effettua una richiesta GET all'URL con l'indirizzo IP. Questa API restituisce una risposta JSON simile a questa:

{
    "ip": "117.214.109.137",
    "version": "IPv4",
    "city": "Gaya",
    "region": "Bihar",
    "region_code": "BR",
    "country": "IN",
    "country_name": "India",
    "country_code": "IN",
    "country_code_iso3": "IND",
    "country_capital": "New Delhi",
    "country_tld": ".in",
    "continent_code": "AS",
    "in_eu": false,
    "postal": "823002",
    "latitude": 24.7935,
    "longitude": 85.012,
    "timezone": "Asia/Kolkata",
    "utc_offset": "+0530",
    "country_calling_code": "+91",
    "currency": "INR",
    "currency_name": "Rupee",
    "languages": "en-IN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc",
    "country_area": 3287590,
    "country_population": 1352617328,
    "asn": "AS9829",
    "org": "National Internet Backbone"
}

La risposta contiene molte informazioni. Puoi scegliere quelle che ti servono. Per questo tutorial, utilizzeremo solo city, region e country. Per questo abbiamo creato un dizionario chiamato location_data, nel quale abbiamo raccolto questi dati e lo abbiamo restituito come risultato.

Infine, chiamiamo la funzione get_location() e stampiamo il risultato. L'output sarà simile a questo:

{
  "ip": "117.214.109.137", 
  "city": "Gaya", 
  "region": "Bihar", 
  "country": "India"
}

Conclusione

In questo articolo, abbiamo imparato come interagire con i servizi web per ottenere informazioni sulla posizione per un particolare indirizzo IP.

Grazie per aver letto questo articolo!