2016-04-24 16 views
0
from urllib2 import urlopen 
from contextlib import closing 
import json 
import time 
import os 

while True: 
    url = 'http://freegeoip.net/json/' 
    try: 
     with closing(urlopen(url)) as response: 
      location = json.loads(response.read()) 
      location_city = location['city'] 
      location_state = location['region_name'] 
      location_country = location['country_name'] 
      #print(location_country) 
      if location_country == "Germany": 
       print("You are now surfing from: " + location_country) 
       os.system(r'firefox /home/user/Documents/alert.html') 
        except: 
     print("Could not find location, searching again...") 
    time.sleep(1) 

Es antwortet kein Land kann ich Hilfe bekommen, um das Problem zu lösen?Python geoip finden Land mit JSON

+0

Ihre Ausnahme ist falsch eingerückt. Es sollte nur mit 4 Leerzeichen indenttet werden – tobspr

Antwort

0

Neben der falschen Einrückung sieht Ihr Code gut aus.

Das Problem scheint zu sein, dass die Seite selbst nicht reagiert. Wenn Sie beispielsweise versuchen, es in einem Browser zu öffnen, wird die Verbindung abgelehnt.

Wahrscheinlich ist die API entweder überlastet oder existiert nicht mehr.

+0

tnx, kennst du noch andere ähnliche Dienste? – Stevie

0

Zum einen scheint der Server down zu sein.

Sie hätten dies wahrscheinlich bemerkt, aber die bare except verbirgt die Tatsache. Im Allgemeinen sollten Sie alle Ausnahmen nicht fangen, aber sollten diejenigen, die Sie erwarten fangen - in diesem Fall eine urllib2.URLError Ausnahme scheint angemessen:

import urllib2 

url = 'http://freegeoip.net/json/' 
try: 
    response = urllib2.urlopen(url) 
    ... 
except urllib2.URLError as exc: 
    print('Could not find location due to exception: {}'.format(exc)) 

Wenn Sie den Code ausführen oben Sie diesen Ausgang kann sehen:

Could not find location due to exception: <urlopen error [Errno 101] Network is unreachable> 

Der Server ist möglicherweise früher aktiv, und das Problem hat möglicherweise eine andere Ursache, z json.loads() könnte fehlschlagen. Wenn Sie den Ausnahmebehandler wie oben gezeigt ändern, können Sie sehen, wo er fehlschlägt.