2014-07-23 26 views
7

Gibt es trotzdem, dass ich den Speicherort meines Geräts durch Python bekommen kann. Momentan muss ich Selen verwenden und einen Browser öffnen, eine Location Service Website verwenden und das Ergebnis davon auf Variablen für lat/long setzen.Holen Sie sich Ihren Standort durch Python

Aber gibt es einen einfacheren Weg, dies zu tun?

UPDATE: Ich benutze einen 3G-Dongle auf meinem RaspberryPi, also suche nach einem Weg, um den spezifischen lat/long davon zu bekommen - ich kann dies erfolgreich durch Web-Service tun, nur frage mich, ob es einen schnelleren Weg eingebaut ist Python für diese Anfragen?

+0

Siehe diese Frage/Antwort: http://stackoverflow.com/questions/2543018/what-python-libraries-can-tell-me-approximate-location-and-time-zone-given-an-ip –

+0

Ich bin Ich bin mir nicht sicher, ob ich das bin suchen, denn das ist ein generischer IP-Befund - ich möchte genau meinen Standort genau wie mobile Geo-Location. –

+0

Wenn Sie "Standort des Geräts" sagen, sprechen Sie von einem Mobiltelefon (oder einem ähnlichen Gerät) oder einem Desktop-PC? –

Antwort

20

Annahmen:

Das Gerät, für das Standort gesucht wird, ist derjenige, der die Python läuft Sie haben einen Internetzugang (scheint Messe, da Sie einen Standort-Service-Website erwähnen)

In einem solchen Fall gibt sind ähnliche Dienste wie der Link im Kommentar, in dem die IP der Anfrage zur Generierung des Standorts verwendet wird. Zum Beispiel http://freegeoip.net/.

import requests 
import json 

send_url = 'http://freegeoip.net/json' 
r = requests.get(send_url) 
j = json.loads(r.text) 
lat = j['latitude'] 
lon = j['longitude'] 

Nachteile

Es wird nur IP verwendet Ort zu erzeugen.

+1

Aber Manchmal gibt es falsche Antworten. Ich habe dies für die mit der IP 103.198.128.234 versucht und das Land USA als Antwort bekommen. Eigentlich ist das Land Indien. In der Gegend hat es gut funktioniert und aber wenn ich es live mache. –

+0

Ihr Skript ist erstaunlich einfach und funktioniert wie Charme! – BSP

1

Hier ist ein Modul Python Geocoding, die GeoFreeIP

Beispiel hat: http://geocoder.readthedocs.io/

$ pip install geocoder 

mit CLI

$ geocode '99.240.181.199' --provider freegeoip --pretty --json 

Python

>>> import geocoder 
>>> g = geocoder.freegeoip('99.240.181.199') 
<[OK] Freegeoip - Geocode [Ottawa, Ontario Canada]> 
>>> g.json 
0

@JishnuM hat die Fragen wunderbar beantwortet.

2 Cent von mir. Sie müssen die json-Bibliothek nicht wirklich importieren.

Sie können gehen Sie wie folgt vor:

freegeoip = "http://freegeoip.net/json" 
geo_r = requests.get(freegeoip) 
geo_json = geo_r.json() 

user_postition = [geo_json["latitude"], geo_json["longitude"]] 

print(user_postition) 
1

Andere einige Dienste erwähnt haben, aber ein anderer meine eigenen zu betrachten ist, https://ipinfo.io, which'll Sie lat geben, lon und ein paar andere Informationen:

$ curl ipinfo.io 
{ 
    "ip": "24.6.61.239", 
    "hostname": "c-24-6-61-239.hsd1.ca.comcast.net", 
    "city": "Mountain View", 
    "region": "California", 
    "country": "US", 
    "loc": "37.3845,-122.0881", 
    "org": "AS7922 Comcast Cable Communications, LLC", 
    "postal": "94040" 
} 

Wenn Sie nur die Daten koordinieren mögen, können Sie nur erhalten, dass durch /loc anfordernden:

$ curl ipinfo.io/loc 
37.3845,-122.0881 

Weitere Informationen finden Sie unter https://ipinfo.io/developers.

+0

Danke! Dein ist genauer als die angenommene (wenn auch ziemlich coole) Antwort, die manchmal den falschen Kontinent zurückgibt ... – tehfink

0

haben wir damit herumgespielt, also danke an alle für die nützlichen Antworten in diesem Thread (und SO im Allgemeinen!) Dachte, ich würde mein kurzes Programm in Fall teile jemand will es in Kombination mit großen Kreis calc

import geocoder 

import requests 
freegeoip = "http://freegeoip.net/json" 
geo_r = requests.get(freegeoip) 
geo_json = geo_r.json() 

address=input('enter an address: ') 
g= geocoder.google(address) 
lat_ad=g.latlng[0] 
lon_ad=g.latlng[1] 

user_postition = [geo_json["latitude"], geo_json["longitude"]] 
lat_ip=user_postition[0] 
lon_ip=user_postition[1] 

#Calculate the great circle distance between two points on the earth (specified in decimal degrees) 

from math import radians, cos, sin, asin, sqrt 
# convert decimal degrees to radians 
lon_ad, lat_ad, lon_ip, lat_ip = map(radians, [lon_ad, lat_ad, lon_ip, lat_ip]) 

# haversine formula 
dlon = lon_ip - lon_ad 
dlat = lat_ip - lat_ad 
a = sin(dlat/2)**2 + cos(lat_ad) * cos(lat_ip) * sin(dlon/2)**2 
c = 2 * asin(sqrt(a)) 
km = 6367 * c 
#end of calculation 

#limit decimals 
km = ('%.0f'%km) 

print(address+' is about '+str(km)+' km away from you') 
5

oder so einfach wie diese

import geocoder 
g = geocoder.ip('me') 
print(g.latlng) 
0

Mit dem https://ipdata.co API

import requests 
r = requests.get('https://api.ipdata.co').json() 
r['country_name'] 
# United States 
sehen
Verwandte Themen