code: def get_observation_sites(self):
          
          if (time() - self.observation_sites_last_update) > self.observation_sites_update_time:
              self.observation_sites_last_update = time()
              data = self.__call_api("sitelist/", None, OBSERVATION_URL)
              sites = list()
              for jsoned in data['Locations']['Location']:
                  site = Site()
                  site.name = jsoned['name']
                  site.id = jsoned['id']
                  site.latitude = jsoned['latitude']
                  site.longitude = jsoned['longitude']
  
                  if 'region' in jsoned:
                      site.region = jsoned['region']
  
                  if 'elevation' in jsoned:
                      site.elevation = jsoned['elevation']
  
                  if 'unitaryAuthArea' in jsoned:
                      site.unitaryAuthArea = jsoned['unitaryAuthArea']
  
                  if 'nationalPark' in jsoned:
                      site.nationalPark = jsoned['nationalPark']
  
                  site.api_key = self.api_key
  
                  sites.append(site)
              self.observation_sites_last_request = sites
          else:
              sites = observation_self.sites_last_request
  
          return sites
docs: This function returns a list of Site objects for which observations are available.