2016-04-24 13 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) 

問題を解決するために私はどの国にも返信しませんか?Python geoip jsonを使用している国を見つける

+0

あなたの例外は間違ってインデントされています。それは4スペースだけindentetする必要があります – tobspr

答えて

0

間違ったインデントのほかに、コードが正常に見えます。

問題はページ自体が応答しないようです。たとえば、ブラウザで開こうとすると、接続が拒否されます。

おそらく、apiがオーバーロードされているか、存在しなくなっている可能性があります。

+0

tnx、あなたは他の同様のサービスを知っていますか? – Stevie

0

一方、サーバーはdownと表示されます。

おそらくこれに気付いたでしょうが、裸のexceptはその事実を隠しています。一般的に、あなたはすべての例外をキャッチするべきではありませんが、あなたが期待するものをキャッチする必要があります - この場合にはurllib2.URLError例外が適切と思われる:

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)) 

あなたは上記のコードを実行する場合は、この出力が表示されることがあります

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

サーバーが以前に起動している可能性があり、実際には別の原因が考えられます。 json.loads()が失敗する可能性があります。上記のように例外ハンドラを変更すると、どこに障害が発生しているかを見ることができます。