generated from mwc/lab_weather
123 lines
3.0 KiB
Python
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()
|