Source code for gatenet.diagnostics.geo
import requests
[docs]
def get_geo_info(ip: str) -> dict:
"""
Example
-------
>>> from gatenet.diagnostics.geo import get_geo_info
>>> get_geo_info("8.8.8.8")
{'status': 'success', 'country': 'United States', ...}
Get geographical information for a given IP address using the ip-api.com service.
Args:
ip (str): The IP address to look up.
Returns:
dict: A dictionary containing geographical information. Example::
{
'status': 'success',
'country': 'United States',
'regionName': 'California',
'city': 'Mountain View',
...
}
If an error occurs, returns a dict with 'error' and 'message' keys.
"""
url = f"http://ip-api.com/json/{ip}"
try:
response = requests.get(url, timeout=3)
data = response.json()
if response.status_code != 200 or data.get('status') == 'fail':
return {
'error': True,
'message': data.get('message', 'Failed to retrieve geo info'),
'status': data.get('status', 'fail'),
'query': ip
}
return data
except requests.RequestException as e:
return {
'error': True,
'message': str(e),
'status': 'fail',
'query': ip
}