mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-12 00:06:07 -07:00
Use Plex.tv for geoip lookup instead of MaxMind database
This commit is contained in:
parent
2162210393
commit
82ab732144
3 changed files with 60 additions and 11 deletions
|
@ -24,7 +24,6 @@
|
||||||
<div id="ip_error" class="col-sm-12 text-muted"></div>
|
<div id="ip_error" class="col-sm-12 text-muted"></div>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li>Continent: <strong><span id="continent"></span></strong></li>
|
|
||||||
<li>Country: <strong><span id="country"></span></strong></li>
|
<li>Country: <strong><span id="country"></span></strong></li>
|
||||||
<li>Region: <strong><span id="region"></span></strong></li>
|
<li>Region: <strong><span id="region"></span></strong></li>
|
||||||
<li>City: <strong><span id="city"></span></strong></li>
|
<li>City: <strong><span id="city"></span></strong></li>
|
||||||
|
@ -36,7 +35,6 @@
|
||||||
<li>Timezone: <strong><span id="timezone"></span></strong></li>
|
<li>Timezone: <strong><span id="timezone"></span></strong></li>
|
||||||
<li>Latitude: <strong><span id="latitude"></span></strong></li>
|
<li>Latitude: <strong><span id="latitude"></span></strong></li>
|
||||||
<li>Longitude: <strong><span id="longitude"></span></strong></li>
|
<li>Longitude: <strong><span id="longitude"></span></strong></li>
|
||||||
<li>Accuracy Radius: <strong><span id="accuracy"></span></strong></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
|
@ -82,11 +80,11 @@
|
||||||
error: function () {
|
error: function () {
|
||||||
$('#ip_error').html('<i class="fa fa-exclamation-circle"></i> Internal request failed.').show();
|
$('#ip_error').html('<i class="fa fa-exclamation-circle"></i> Internal request failed.').show();
|
||||||
},
|
},
|
||||||
success: function (data) {
|
success: function (result) {
|
||||||
if ('error' in data) {
|
if (result.results === 'error') {
|
||||||
$('#ip_error').html('<i class="fa fa-exclamation-circle"></i> ' + data.error).show();
|
$('#ip_error').html('<i class="fa fa-exclamation-circle"></i> ' + result.message).show();
|
||||||
} else {
|
} else {
|
||||||
$('#continent').html(data.continent);
|
var data = result.data;
|
||||||
$('#country').html(data.country);
|
$('#country').html(data.country);
|
||||||
$('#region').html(data.region);
|
$('#region').html(data.region);
|
||||||
$('#city').html(data.city);
|
$('#city').html(data.city);
|
||||||
|
@ -94,7 +92,6 @@
|
||||||
$('#timezone').html(data.timezone);
|
$('#timezone').html(data.timezone);
|
||||||
$('#latitude').html(data.latitude);
|
$('#latitude').html(data.latitude);
|
||||||
$('#longitude').html(data.longitude);
|
$('#longitude').html(data.longitude);
|
||||||
$('#accuracy').html(data.accuracy + ' km');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -377,6 +377,14 @@ class PlexTV(object):
|
||||||
|
|
||||||
return request
|
return request
|
||||||
|
|
||||||
|
def get_plextv_geoip(self, ip_address='', output_format=''):
|
||||||
|
uri = '/api/v2/geoip?ip_address=%s' % ip_address
|
||||||
|
request = self.request_handler.make_request(uri=uri,
|
||||||
|
request_type='GET',
|
||||||
|
output_format=output_format)
|
||||||
|
|
||||||
|
return request
|
||||||
|
|
||||||
def get_full_users_list(self):
|
def get_full_users_list(self):
|
||||||
own_account = self.get_plextv_user_details(output_format='xml')
|
own_account = self.get_plextv_user_details(output_format='xml')
|
||||||
friends_list = self.get_plextv_friends(output_format='xml')
|
friends_list = self.get_plextv_friends(output_format='xml')
|
||||||
|
@ -923,3 +931,35 @@ class PlexTV(object):
|
||||||
"user_token": helpers.get_xml_attr(a, 'authToken')
|
"user_token": helpers.get_xml_attr(a, 'authToken')
|
||||||
}
|
}
|
||||||
return account_details
|
return account_details
|
||||||
|
|
||||||
|
def get_geoip_lookup(self, ip_address=''):
|
||||||
|
if not ip_address or not helpers.is_public_ip(ip_address):
|
||||||
|
return
|
||||||
|
|
||||||
|
geoip_data = self.get_plextv_geoip(ip_address=ip_address, output_format='xml')
|
||||||
|
|
||||||
|
try:
|
||||||
|
xml_head = geoip_data.getElementsByTagName('location')
|
||||||
|
except Exception as e:
|
||||||
|
logger.warn(u"Tautulli PlexTV :: Unable to parse XML for get_geoip_lookup: %s." % e)
|
||||||
|
return None
|
||||||
|
|
||||||
|
for a in xml_head:
|
||||||
|
coordinates = helpers.get_xml_attr(a, 'coordinates').split(',')
|
||||||
|
latitude = longitude = None
|
||||||
|
if len(coordinates) == 2:
|
||||||
|
latitude, longitude = [helpers.cast_to_float(c) for c in coordinates]
|
||||||
|
|
||||||
|
geo_info = {"code": helpers.get_xml_attr(a, 'code') or None,
|
||||||
|
"country": helpers.get_xml_attr(a, 'country') or None,
|
||||||
|
"region": helpers.get_xml_attr(a, 'subdivisions') or None,
|
||||||
|
"city": helpers.get_xml_attr(a, 'city') or None,
|
||||||
|
"postal_code": helpers.get_xml_attr(a, 'postal_code') or None,
|
||||||
|
"timezone": helpers.get_xml_attr(a, 'time_zone') or None,
|
||||||
|
"latitude": latitude,
|
||||||
|
"longitude": longitude,
|
||||||
|
"continent": None, # keep for backwards compatibility with GeoLite2
|
||||||
|
"accuracy": None # keep for backwards compatibility with GeoLite2
|
||||||
|
}
|
||||||
|
|
||||||
|
return geo_info
|
||||||
|
|
|
@ -5751,10 +5751,22 @@ class WebInterface(object):
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
"""
|
"""
|
||||||
geo_info = helpers.geoip_lookup(ip_address)
|
message = ''
|
||||||
if isinstance(geo_info, basestring):
|
if not ip_address:
|
||||||
return {'error': geo_info}
|
message = 'No IP address provided.'
|
||||||
return geo_info
|
elif not helpers.is_valid_ip(ip_address):
|
||||||
|
message = 'Invalid IP address provided: %s' % ip_address
|
||||||
|
elif not helpers.is_public_ip(ip_address):
|
||||||
|
message = 'Non-public IP address provided: %s' % ip_address
|
||||||
|
|
||||||
|
if message:
|
||||||
|
return {'result': 'error', 'message': message}
|
||||||
|
|
||||||
|
plex_tv = plextv.PlexTV()
|
||||||
|
geo_info = plex_tv.get_geoip_lookup(ip_address)
|
||||||
|
if geo_info:
|
||||||
|
return {'result': 'success', 'data': geo_info}
|
||||||
|
return {'result': 'error', 'message': 'Failed to lookup GeoIP info for address: %s' % ip_address}
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue