web-dev-qa-db-fra.com

Quelles bibliothèques python peuvent me dire l'emplacement approximatif et le fuseau horaire en fonction d'une adresse IP?

Vous cherchez à implémenter une meilleure géo-localisation avec Python.

42
ensnare

HOSTIP.INFO est un projet open source ayant pour objectif de créer/gérer une base de données. Mapper des adresses IP sur des villes. Leur page about explique les sources de données utilisées pour remplir cette base de données.

À l'aide de HostIP, il existe deux manières d'obtenir des données de localisation à partir d'une adresse IP:

Ils ont également un RESTFUL API: bien conçu et facile à utiliser: il suffit de passer votre adresse IP après le i *** p = *** dans la chaîne de requête GET):

import urllib

response = urllib.urlopen('http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true').read()

print(response)

Deuxièmement, le site Web du projet permet également le téléchargement complet de sa base de données .

36
doug

Ce n'est pas une lib Python. Mais http://ipinfodb.com/ fournit un service Web pouvant être facilement encapsulé par du code Python avec urllib par exemple.

http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&ip=74.125.45.100
http://api.ipinfodb.com/v3/ip-country/?key=<your_api_key>&ip=74.125.45.100

Vous devez demander une clé d'API gratuite. Voir le API doc pour plus de détails.

13
luc

Vous trouverez ces modules utiles: GeoIP de MaxMind et sa version pure , ainsi que pytz .

8
ony

J'ai posté ceci dans une autre question qui avait été enterrée, mais liée ici: 

#!/usr/bin/env python 
from urllib2 import urlopen
from contextlib import closing
import json

# Automatically geolocate the connecting IP
url = 'http://freegeoip.net/json/'
try:
    with closing(urlopen(url)) as response:
        location = json.loads(response.read())
        print(location)
        location_city = location['city']
        location_state = location['region_name']
        location_country = location['country_name']
        location_Zip = location['zipcode']
except:
    print("Location could not be determined automatically")

Envoyez les requêtes HTTP GET à: freegeoip.net/{format}/{ip_or_hostname} pour recevoir une sortie JSON que Python peut analyser.

Je reçois les clés JSON suivantes, qui devraient suffire à vos besoins:

  • ip
  • code postal
  • nom du pays
  • code_région
  • nom_région
  • ville
  • code postal
  • latitude
  • longitude
  • metro_code
  • indicatif régional
7
Jason Parham

Trouvé https://freegeoip.net/ ; échantillon python ci-dessous.

import requests

FREEGEOPIP_URL = 'http://freegeoip.net/json/'

SAMPLE_RESPONSE = """{
    "ip":"108.46.131.77",
    "country_code":"US",
    "country_name":"United States",
    "region_code":"NY",
    "region_name":"New York",
    "city":"Brooklyn",
    "Zip_code":"11249",
    "time_zone":"America/New_York",
    "latitude":40.645,
    "longitude":-73.945,
    "metro_code":501
}"""


def get_geolocation_for_ip(ip):
    url = '{}/{}'.format(FREEGEOPIP_URL, ip)

    response = requests.get(url)
    response.raise_for_status()

    return response.json()
5
berto

IP API est également un très bon moyen de le faire.

import urllib

ip= '12.24.36.48'

url = 'http://ip-api.com/json/' + ip

req = urllib.request.Request(url)

out = urllib.request.urlopen(req).read()

enter image description here

4
Shubham Chaudhary

Je pense que freegeip est une bonne option. Vous trouverez ci-dessous le code Python 3.4.2 permettant d’obtenir l’emplacement et le fuseau horaire. 

>>> import requests
>>> ip = '141.70.111.66'   
>>> url = 'http://freegeoip.net/json/'+ip
>>> r = requests.get(url)
>>> js = r.json()
>>> js['country_code']
'DE'
>>> js['country_name']
'Germany'
>>> js['time_zone']
'Europe/Berlin'
2
Waqar Detho

"Geopy permet aux développeurs de localiser facilement les coordonnées d'adresses, de villes, de pays et de points de repère dans le monde entier à l'aide de géocodeurs tiers et d'autres sources de données, telles que les wikis.

geopy prend actuellement en charge six géocodeurs: Google Maps, Yahoo! Cartes, Windows Local Live (Terre virtuelle), geocoder.us, GeoNames, pages MediaWiki (avec l'extension GIS) et pages Semantic MediaWiki. "

1
Kylotan

J'utilise ipinfodb, il est gratuit (inscription requise) et a une limite de 2 requêtes par seconde et semble être précis. 

essayer:

http://api.ipinfodb.com/v3/ip-city/?key= {{API_KEY}} & ip = 190.188.221.244 & timezone = true

résultats:

OK ;; 190.188.221.244; AR; ARGENTINE; BUENOS AIRES; LA PLATA; -; - 34,931; -57,949; -03: 00

1
sebastian serrano

Vous pouvez utiliser des demandes pour appeler mon service https://ipdata.co

import requests

ip = '1.1.1.1'
response = requests.get('https://api.ipdata.co/{}'.format(ip)).json()
response['time_zone']
0
Jonathan