Python предоставляет множество библиотек и инструментов для работы с геоданными. В этой статье мы рассмотрим основные библиотеки, которые помогут вам получить геоданные, а также пример их использования.
Вариант 1:import requests
'''
pip install requests
http://ipwho.is/
https://ipapi.co/json/
'''
def geodata(ip=''):
if ip:
public_ip = '/' + ip
else:
public_ip = ''
r = requests.get(f'http://ip-api.com/json{public_ip}?fields=66846719&lang=ru')
return r.json()
data = geodata()
print('Continent:', data['continent'], '[' + data['continentCode'] + ']')
print('Country:', data['country'], '[' + data['countryCode'] + ']')
print('Region:', data['regionName'])
print('City:', data['city'])
print('IP:', data['query'])
print('Latitude:', data['lat'])
print('Longitude:', data['lon'])
print('Timezone:', data['timezone'])
print('Currency:', data['currency'])
print('Provider:', data['as'], '[' + data['asname'] + ']')
Вариант 2:
pysxgeo — это библиотека Python для работы с базами данных GeoIP, аналогично библиотеке geoip2, но с акцентом на производительность и простоту использования. В этой статье мы рассмотрим, как использовать pysxgeo для получения геоданных.
from pysxgeo import sxgeo
import socket, requests
'''
pip install pysxgeo requests
https://sypexgeo.net/ru/download/
'''
def geodata(ip=''):
if ip:
public_ip = ip
else:
response = requests.get('https://api.ipify.org?format=json')
public_ip = response.json()['ip']
info = sxgeo.SxGeo(db_file='SxGeoCity.dat', mode=sxgeo.SXGEO_BATCH)
return public_ip, info.get_city(public_ip, full=True)
public_ip, data = geodata()
print('Country:', data['country']['name_ru'], '[' + data['country']['iso'] + ']')
print('Region:', data['region']['name_ru'])
print('City:', data['city']['name_ru'])
print('Public IP:', public_ip)
print('Latitude:', data['city']['lat'])
print('Longitude:', data['city']['lon'])
Вариант 3:
MaxMind - предоставляет мощные инструменты для работы с геолокацией, включая базу данных GeoIP и API для точного определения местоположения по IP-адресам. В этой статье мы рассмотрим, как использовать MaxMind с Python для получения геоданных.
import geoip2.database
import requests
'''
pip install geoip2 requests
https://www.maxmind.com/
'''
def geodata(ip=''):
output = {}
if ip:
public_ip = ip
else:
response = requests.get('https://api.ipify.org?format=json')
public_ip = response.json()['ip']
with geoip2.database.Reader('GeoLite2-City.mmdb') as reader:
response = reader.city(public_ip)
output['continentCode'] = response.continent.code
output['continent'] = response.continent.names['ru']
output['countryCode'] = response.country.iso_code
output['country'] = response.country.names['ru']
output['regionName'] = response.subdivisions[0].names['ru']
output['city'] = response.city.names['ru']
output['lat'] = str(response.location.latitude)
output['lon'] = str(response.location.longitude)
output['timezone'] = response.location.time_zone
output['accuracyRadius'] = str(response.location.accuracy_radius)
output['query'] = str(response.traits.ip_address)
return output
data = geodata()
print('Continent:', data['continent'], '[' + data['continentCode'] + ']')
print('Country:', data['country'], '[' + data['countryCode'] + ']')
print('Region:', data['regionName'])
print('City:', data['city'])
print('IP:', data['query'])
print('Latitude:', data['lat'])
print('Longitude:', data['lon'])
print('Timezone:', data['timezone'])
print('Accuracy radius:', data['accuracyRadius'])
*текст*
- жирный,
~текст~
- курсивный,
-текст-
- _текст_
- подчеркнутый