bumblebee-status/util/location.py

70 lines
1.5 KiB
Python
Raw Normal View History

import json
import time
import urllib.request
__document = None
__data = {}
__next = 0
__sources = [
{
'url': 'http://free.ipwhois.io/json/',
'mapping': {
'latitude': 'latitude',
'longitude': 'longitude',
'country': 'country',
'ip': 'public_ip',
}
},
{
'url': 'http://ipapi.co/json',
'mapping': {
'latitude': 'latitude',
'longitude': 'longitude',
'country_name': 'country',
'ip': 'public_ip',
}
}
]
def __expired():
global __next
return __next <= time.time()
def __load():
global __data
global __next
__data = {}
for src in __sources:
try:
tmp = json.loads(urllib.request.urlopen(src['url']).read())
for k, v in src['mapping'].items():
__data[v] = tmp.get(k, None)
__next = time.time() + 60*60*12 # update once every 12h
return
except Exception as e:
pass
__next = time.time() + 60*30 # error - try again every 30m
def __get(name, default=None):
global __data
if not __data or __expired():
__load()
return __data.get(name, default)
def reset():
global __next
__next = 0
def coordinates():
return __get('latitude'), __get('longitude')
def country():
return __get('country')
def public_ip():
return __get('public_ip')
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4