lab_weather/geocoder/geonames_details.py

123 lines
3.0 KiB
Python

from __future__ import absolute_import
from geocoder.geonames import GeonamesQuery, GeonamesResult
class GeonamesFullResult(GeonamesResult):
""" Get more information for given geonames_id, e.g timzone and administrative hierarchy"""
@property
def continent(self):
return self.raw.get('continentCode', "")
@property
def country_geonames_id(self):
return self.raw.get('countryId', 0)
@property
def state_geonames_id(self):
return self.raw.get('adminId1', 0)
@property
def admin2(self):
return self.raw.get('adminName2', "")
@property
def admin2_geonames_id(self):
return self.raw.get('adminId2', "")
@property
def admin3(self):
return self.raw.get('adminName3', "")
@property
def admin3_geonames_id(self):
return self.raw.get('adminId3', "")
@property
def admin4(self):
return self.raw.get('adminName4', "")
@property
def admin4_geonames_id(self):
return self.raw.get('adminId4', "")
@property
def admin5(self):
return self.raw.get('adminName5', "")
@property
def admin5_geonames_id(self):
return self.raw.get('adminId5', "")
@property
def srtm3(self):
return self.raw.get('srtm3', 0)
@property
def wikipedia(self):
return self.raw.get('wikipediaURL', "")
@property
def timeZoneId(self):
timezone = self.raw.get('timezone')
if timezone:
return timezone.get('timeZoneId')
@property
def timeZoneName(self):
timezone = self.raw.get('timezone')
if timezone:
return timezone.get('timeZoneId')
@property
def rawOffset(self):
timezone = self.raw.get('timezone')
if timezone:
return timezone.get('gmtOffset')
@property
def dstOffset(self):
timezone = self.raw.get('timezone')
if timezone:
return timezone.get('dstOffset')
@property
def bbox(self):
bbox = self.raw.get('bbox', {})
south = bbox.get('south')
west = bbox.get('west')
north = bbox.get('north')
east = bbox.get('east')
return self._get_bbox(south, west, north, east)
class GeonamesDetails(GeonamesQuery):
""" Details:
http://api.geonames.org/getJSON?geonameId=6094817&style=full
"""
provider = 'geonames'
method = 'details'
_URL = 'http://api.geonames.org/getJSON'
_RESULT_CLASS = GeonamesFullResult
def _build_params(self, location, provider_key, **kwargs):
"""Will be overridden according to the targetted web service"""
return {
'geonameId': location,
'username': provider_key,
'style': 'full'
}
def _adapt_results(self, json_response):
# the returned JSON contains the object.
# Need to wrap it into an array
return [json_response]
if __name__ == '__main__':
c = GeonamesDetails(6094817)
c.debug()