it-swarm.com.de

Welche Python-Bibliotheken können mir eine ungefähre Position und Zeitzone einer IP-Adresse mitteilen?

Mit Python bessere Geo-Location implementieren.

42
ensnare

Hostip.info ist ein Open-Source-Projekt mit dem Ziel, eine Datenbank Zuordnung von IP-Adressen zu Städten zu erstellen/zu verwalten. Auf ihrer Seite about werden die Datenquellen erläutert, auf die sich diese Datenbank auffüllt.

Mit HostIP gibt es zwei Möglichkeiten, Standortdaten von einer IP-Adresse abzurufen:

Sie haben auch ein gut entworfenes und benutzerfreundliches RESTFUL API: Geben Sie einfach Ihre IP-Adresse nach dem i *** p = *** in der GET-Anforderungszeichenfolge ein ):

import urllib

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

print(response)

Zweitens stellt die Projekt-Website auch ihre vollständige Datenbank zum Download zur Verfügung.

36
doug

Es ist keine Python-Bibliothek. http://ipinfodb.com/ bietet jedoch einen Webservice, der von Python-Code beispielsweise mit urllib problemlos umschlossen werden kann.

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

Sie müssen einen kostenlosen API-Schlüssel anfordern. Weitere Informationen finden Sie im API-Dokument .

13
luc

Diese Module können nützlich sein: MaxMinds GeoIP und seine reine Version sowie auch pytz .

8
ony

Ich habe dies in einer anderen Frage gepostet, die hier begraben wurde, aber hier verlinkt ist: 

#!/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")

Senden Sie HTTP GET-Anforderungen an: freegeoip.net/{format}/{ip_or_hostname}, um eine JSON-Ausgabe zu erhalten, die Python analysieren kann.

Ich bekomme die folgenden JSON-Schlüssel, die für das, was Sie brauchen, ausreichen sollte:

  • ip
  • ländercode
  • ländername
  • postleitzahl
  • regionsname
  • stadt
  • postleitzahl
  • breite
  • längengrad
  • metro_code
  • area_code
7
Jason Parham

Gefunden https://freegeoip.net/ ; Python-Beispiel unten.

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 ist auch eine sehr schöne Möglichkeit, dies zu tun.

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

Ich denke, Freegeip ist eine gute Option. Unten ist der Python 3.4.2-Code zum Abrufen von Standort und Zeitzone. 

>>> 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 macht es Entwicklern leicht, die Koordinaten von Adressen, Städten, Ländern und Sehenswürdigkeiten auf der ganzen Welt mithilfe von Geocodern von Drittanbietern und anderen Datenquellen wie Wikis zu ermitteln.

geopy unterstützt derzeit sechs Geocodierer: Google Maps, Yahoo! Maps, Windows Local Live (Virtual Earth), geocoder.us, GeoNames, MediaWiki-Seiten (mit der GIS-Erweiterung) und Semantic MediaWiki-Seiten. "

1
Kylotan

Ich verwende ipinfodb, ist kostenlos (Registrierung erforderlich) und verfügt über 2 Abfragen pro Sekunde und scheint genau zu sein. 

versuchen:

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

kehrt zurück:

OK ;; 190.188.221.244; AR; ARGENTINIEN; BUENOS AIRES; LA PLATA; -; - 34.931; -57.949; -03: 00

1

Sie können Anfragen verwenden, um meinen Dienst anzurufen. 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

Installieren Sie das Python Modul pygeoip

C:>pip install pygeoip

Laden Sie die Binärdatei von GeoLite City hier herunter: https://dev.maxmind.com/geoip/legacy/geolite/

Dann:

>>> import pygeoip
>>> g = pygeoip.GeoIP('GeoLiteCity.dat')
>>> ip = '134.222.199.110' #just an example
>>> g.record_by_addr(ip)['latitude']
52.38239999999999
>>> g.record_by_addr(ip)['longitude']
4.899499999999989
>>> g.record_by_addr(ip)['time_zone']
'Europe/Amsterdam'

Im Gegensatz zu der Freegeoip-Lösung, die ich in den anderen Kommentaren gesehen habe, ist die Anzahl der IPs pro Stunde bei dieser Option nicht begrenzt, sie kann lokal ohne Internetverbindung verwendet werden und die Geokoordinaten sind im Allgemeinen genauer.

0
Ideophagous