|
@@ -1,11 +1,23 @@
|
|
-import urllib
|
|
|
|
|
|
+import requests
|
|
|
|
+import logging
|
|
|
|
|
|
-from django.http import HttpResponse
|
|
|
|
|
|
+from django.http import HttpResponse, HttpResponseServerError
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
|
|
|
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
|
+
|
|
|
|
|
|
def geonames_altitude(request, lat, lon):
|
|
def geonames_altitude(request, lat, lon):
|
|
lat = float(lat)
|
|
lat = float(lat)
|
|
lon = float(lon)
|
|
lon = float(lon)
|
|
url = settings.GEONAMES_ASTERGDEM.format(lat=lat, lon=lon)
|
|
url = settings.GEONAMES_ASTERGDEM.format(lat=lat, lon=lon)
|
|
- return HttpResponse(urllib.request.urlopen(url))
|
|
|
|
|
|
+ r = requests.get(url)
|
|
|
|
+ if r.status_code != 200:
|
|
|
|
+ return HttpResponseServerError()
|
|
|
|
+ # The API sometimes returns an error but still sends a 200 code,
|
|
|
|
+ # so we validate the answer just to make sure...
|
|
|
|
+ try:
|
|
|
|
+ return HttpResponse(float(r.text))
|
|
|
|
+ except ValueError:
|
|
|
|
+ logger.warning("api.geonames.org error: {}".format(r.text))
|
|
|
|
+ return HttpResponseServerError()
|