Exemple #1
0
def get_inv_direction(lat, lon):
    print('******* Adquiring inv direction *******')
    location = GeocodeGlib.Location.new(cf.s2f(lat), cf.s2f(lon), 1000)
    reverse = GeocodeGlib.Reverse.new_for_location(location)
    aplace = reverse.resolve()
    direction = {}
    direction['city'] = aplace.get_town()
    direction['state'] = aplace.get_state()
    direction['country'] = aplace.get_country()
    direction['lat'] = aplace.get_location().get_latitude()
    direction['lng'] = aplace.get_location().get_longitude()
    direction['woeid'] = None
    direction['search_string'] = aplace.get_name()
    return direction
    def __daylen__(self, year, month, day, lon, lat, altit, upper_limb):
        """
        Note: year,month,date = calendar date, 1801-2099 only.
              Eastern longitude positive, Western longitude negative
              Northern latitude positive, Southern latitude negative
              The longitude value is not critical. Set it to the correct
              longitude if you're picky, otherwise set to, say, 0.0
              The latitude however IS critical - be sure to get it correct
              altit = the altitude which the Sun should cross
                      Set to -35/60 degrees for rise/set, -6 degrees
                      for civil, -12 degrees for nautical and -18
                      degrees for astronomical twilight.
                upper_limb: non-zero -> upper limb, zero -> center
                      Set to non-zero (e.g. 1) when computing day length
                      and to zero when computing day+twilight length.

        """

        # Compute d of 12h local mean solar time
        lon = cf.s2f(lon)
        d = self.daysSince2000Jan0(year, month, day) + 0.5 - (lon / 360.0)

        # Compute obliquity of ecliptic (inclination of Earth's axis)
        obl_ecl = 23.4393 - 3.563E-7 * d

        # Compute Sun's position
        res = self.sunpos(d)
        slon = res[0]
        sr = res[1]

        # Compute sine and cosine of Sun's declination
        sin_sdecl = self.sind(obl_ecl) * self.sind(slon)
        cos_sdecl = math.sqrt(1.0 - sin_sdecl * sin_sdecl)

        # Compute the Sun's apparent radius, degrees
        sradius = 0.2666 / sr

        # Do correction to upper limb, if necessary
        if upper_limb:
            altit = altit - sradius

        cost = (self.sind(altit) - self.sind(lat) * sin_sdecl) / \
            (self.cosd(lat) * cos_sdecl)
        if cost >= 1.0:
            t = 0.0             # Sun always below altit

        elif cost <= -1.0:
            t = 24.0      # Sun always above altit

        else:
            t = (2.0 / 15.0) * self.acosd(cost)

        return t
 def get_weather(self):
     weather_data = self.get_default_values()
     if self.latlontrouble:
         temp = self.url2
         self.url2 = self.url1
         self.url1 = temp
         self.latlontrouble = False
     for i in range(0, 6):
         if i < 3:
             URL = self.url1
             self.latlontrouble = False
         else:
             URL = self.url2
             self.latlontrouble = True
         try:
             #
             xml_response = download_xml(URL)
             root = etree.fromstring(xml_response).xpath('/xml_api_reply/weather/current_conditions')
             if len(root) == 0:
                 raise Exception('Root 0')
             temperature = get_data(root[0], 'temp_f')
             velocity = get_data(root[0], 'wind_condition')
             velocity = cf.s2f(velocity.split(' ')[3])
             humidity = weatherservice.get_humidity(get_data(root[0], 'humidity'))
             condition = get_data(root[0], 'condition').lower()
             weather_data['current_conditions']['condition'] = condition
             weather_data['current_conditions']['condition_text'] = weatherservice.get_condition(condition, 'text')
             if weatherservice.is_day_now(weather_data['current_conditions']['sunrise_time'], weather_data['current_conditions']['sunset_time']):
                 weather_data['current_conditions']['condition_image'] = weatherservice.get_condition(condition, 'image')
                 weather_data['current_conditions']['condition_icon_dark'] = weatherservice.get_condition(condition, 'icon-dark')
                 weather_data['current_conditions']['condition_icon_light'] = weatherservice.get_condition(condition, 'icon-light')
             else:
                 weather_data['current_conditions']['condition_image'] = weatherservice.get_condition(condition, 'image-night')
                 weather_data['current_conditions']['condition_icon_dark'] = weatherservice.get_condition(condition, 'icon-night-dark')
                 weather_data['current_conditions']['condition_icon_light'] = weatherservice.get_condition(condition, 'icon-night-light')
             weather_data['current_conditions']['temperature'] = cf.change_temperature(temperature, self.units.temperature)
             weather_data['current_conditions']['pressure'] = None
             weather_data['current_conditions']['humidity'] = '%s %%' % (humidity)
             weather_data['current_conditions']['dew_point'] = weatherservice.get_dew_point(humidity, temperature, self.units.temperature)
             wind = get_data(root[0], 'wind_condition')
             wind_direction = wind.split(' ')[1]
             wind_direction = wind_direction.lower()
             wind_velocity = wind.split(' ')
             weather_data['current_conditions']['wind_condition'] = weatherservice.get_wind_condition(wind_velocity, wind_direction, self.units.wind)
             #
             weather_data['current_conditions']['heat_index'] = weatherservice.get_heat_index(temperature, humidity)
             weather_data['current_conditions']['windchill'] = weatherservice.get_wind_chill(temperature, wind_velocity)
             #
             weather_data['current_conditions']['feels_like'] = weatherservice.get_feels_like(temperature, humidity, velocity, self.units.temperature)
             #
             weather_data['current_conditions']['visibility'] = None
             weather_data['current_conditions']['solarradiation'] = None
             weather_data['current_conditions']['UV'] = None
             weather_data['current_conditions']['precip_1hr'] = None
             weather_data['current_conditions']['precip_today'] = None
             #
             root = etree.fromstring(xml_response).xpath('/xml_api_reply/weather/forecast_conditions')
             for i, el in enumerate(root):
                 weather_data['forecasts'][i]['low'] = cf.change_temperature(get_data(el, 'low'), self.units.temperature)
                 weather_data['forecasts'][i]['high'] = cf.change_temperature(get_data(el, 'high'), self.units.temperature)
                 #
                 weather_data['forecasts'][i]['qpf_allday'] = None
                 weather_data['forecasts'][i]['qpf_day'] = None
                 weather_data['forecasts'][i]['qpf_night'] = None
                 weather_data['forecasts'][i]['snow_allday'] = None
                 weather_data['forecasts'][i]['snow_day'] = None
                 weather_data['forecasts'][i]['snow_night'] = None
                 weather_data['forecasts'][i]['maxwind'] = None
                 weather_data['forecasts'][i]['avewind'] = None
                 weather_data['forecasts'][i]['avehumidity'] = None
                 weather_data['forecasts'][i]['maxhumidity'] = None
                 weather_data['forecasts'][i]['minhumidity'] = None
                 #
                 condition = get_data(el, 'condition').lower()
                 weather_data['forecasts'][i]['condition'] = condition
                 weather_data['forecasts'][i]['condition_text'] = weatherservice.get_condition(condition, 'text')
                 weather_data['forecasts'][i]['condition_image'] = weatherservice.get_condition(condition, 'image')
                 weather_data['forecasts'][i]['condition_icon'] = weatherservice.get_condition(condition, 'icon-light')
             #
             root = etree.fromstring(xml_response).xpath('/xml_api_reply/weather/forecast_information')
             weather_data['forecast_information']['city'] = get_data(root[0], 'city')
             weather_data['forecast_information']['postal_code'] = get_data(root[0], 'postal_code')
             weather_data['forecast_information']['latitude_e6'] = get_data(root[0], 'latitude_e6')
             weather_data['forecast_information']['longitude_e6'] = get_data(root[0], 'longitude_e6')
             weather_data['forecast_information']['forecast_date'] = get_data(root[0], 'forecast_date')
             weather_data['forecast_information']['current_date_time'] = get_data(root[0], 'current_date_time')
             weather_data['forecast_information']['unit_system'] = get_data(root[0], 'unit_system')
             return weather_data
         except Exception as e:
             time.sleep(1)
             if i > 3:
                 print(e)
     return weather_data
Exemple #4
0
 def _get_weather(self):
     weather_data = self.get_default_values()
     print('-------------------------------------------------------')
     print('-------------------------------------------------------')
     print('Underground Weather Service url: %s' % URL %
           (self.key, self.latitude, self.longitude))
     print('-------------------------------------------------------')
     print('-------------------------------------------------------')
     parsed_json = read_json_from_url(
         URL % (self.key, self.latitude, self.longitude))
     if parsed_json is None:
         return weather_data
     weather_data['update_time'] = time.time()
     weather_data['ok'] = True
     condition = gvfco('weather', parsed_json).lower()
     #
     weather_data['current_conditions']['condition_text'] =\
         weatherservice.get_condition(condition, 'text')
     if weather_data['current_conditions']['isday']:
         weather_data['current_conditions']['condition_image'] =\
             weatherservice.get_condition(condition, 'image')
         weather_data['current_conditions']['condition_icon_dark'] =\
             weatherservice.get_condition(condition, 'icon-dark')
         weather_data['current_conditions']['condition_icon_light'] =\
             weatherservice.get_condition(condition, 'icon-light')
     else:
         weather_data['current_conditions']['condition_image'] =\
             weatherservice.get_condition(condition, 'image-night')
         weather_data['current_conditions']['condition_icon_dark'] =\
             weatherservice.get_condition(condition, 'icon-night-dark')
         weather_data['current_conditions']['condition_icon_light'] =\
             weatherservice.get_condition(condition, 'icon-night-light')
     temperature = cf.s2f(gvfco('temp_f', parsed_json))
     weather_data['current_conditions']['temperature'] =\
         cf.change_temperature(
             temperature, self.units.temperature)
     pressure = cf.s2f(gvfco('pressure_mb', parsed_json))
     weather_data['current_conditions']['pressure'] =\
         weatherservice.change_pressure(pressure, self.units.pressure)
     humidity = cf.s2f(gvfco('relative_humidity', parsed_json)[:-1])
     weather_data['current_conditions']['humidity'] = str(
         int(humidity)) + ' %'
     weather_data['current_conditions']['dew_point'] =\
         weatherservice.get_dew_point(
             humidity, temperature, self.units.temperature)
     wind_velocity = cf.s2f(gvfco('wind_mph', parsed_json))
     wind_direction = gvfco('wind_dir', parsed_json)
     weather_data['current_conditions']['wind_condition'] =\
         weatherservice.get_wind_condition(
             wind_velocity, wind_direction, self.units.wind)
     weather_data['current_conditions']['wind_icon'] =\
         weatherservice.get_wind_icon(wind_direction)
     #
     weather_data['current_conditions']['heat_index'] =\
         weatherservice.get_heat_index(temperature, humidity)
     weather_data['current_conditions']['windchill'] =\
         weatherservice.get_wind_chill(temperature, wind_velocity)
     #
     weather_data['current_conditions']['feels_like'] =\
         weatherservice.get_feels_like(
             temperature, humidity, wind_velocity, self.units.temperature)
     #
     weather_data['current_conditions']['visibility'] =\
         weatherservice.change_distance(
             gvfco('visibility_mi', parsed_json), self.units.visibility)
     weather_data['current_conditions']['solarradiation'] = gvfco(
         'solarradiation', parsed_json)
     weather_data['current_conditions']['UV'] = gvfco('UV', parsed_json)
     weather_data['current_conditions']['precip_1hr'] =\
         weatherservice.change_longitude(
             gvfco('precip_1hr_in', parsed_json), self.units.rain)
     weather_data['current_conditions']['precip_today'] =\
         weatherservice.change_longitude(
             gvfco('precip_today_in', parsed_json), self.units.rain)
     for i in range(0, 4):
         weather_data['forecasts'][i]['low'] =\
             cf.change_temperature(
                 gvff('low', i, parsed_json)['fahrenheit'],
                 self.units.temperature)
         weather_data['forecasts'][i]['high'] =\
             cf.change_temperature(
                 gvff('high', i, parsed_json)['fahrenheit'],
                 self.units.temperature)
         #
         weather_data['forecasts'][i]['qpf_allday'] =\
             weatherservice.change_longitude(
                 gvff('qpf_allday', i, parsed_json)['in'], self.units.rain)
         weather_data['forecasts'][i]['qpf_day'] =\
             weatherservice.change_longitude(
                 gvff('qpf_day', i, parsed_json)['in'], self.units.rain)
         weather_data['forecasts'][i]['qpf_night'] =\
             weatherservice.change_longitude(
                 gvff('qpf_night', i, parsed_json)['in'], self.units.rain)
         weather_data['forecasts'][i]['snow_allday'] =\
             weatherservice.change_longitude(
                 gvff('snow_allday', i, parsed_json)['in'], self.units.snow)
         weather_data['forecasts'][i]['snow_day'] =\
             weatherservice.change_longitude(
                 gvff('snow_day', i, parsed_json)['in'], self.units.snow)
         weather_data['forecasts'][i]['snow_night'] =\
             weatherservice.change_longitude(
                 gvff('snow_night', i, parsed_json)['in'], self.units.snow)
         wind = gvff('maxwind', i, parsed_json)
         weather_data['forecasts'][i]['maxwind'] =\
             weatherservice.get_wind_condition(
                 wind['mph'], wind['dir'], self.units.wind)
         wind = gvff('avewind', i, parsed_json)
         weather_data['forecasts'][i]['avewind'] =\
             weatherservice.get_wind_condition(
                 wind['mph'], wind['dir'], self.units.wind)
         weather_data['forecasts'][i]['avehumidity'] = '%s %%' % gvff(
             'avehumidity', i, parsed_json)
         weather_data['forecasts'][i]['maxhumidity'] = '%s %%' % gvff(
             'maxhumidity', i, parsed_json)
         weather_data['forecasts'][i]['minhumidity'] = '%s %%' % gvff(
             'minhumidity', i, parsed_json)
         #
         condition = gvff('conditions', i, parsed_json).lower()
         weather_data['forecasts'][i]['condition'] = condition
         weather_data['forecasts'][i]['condition_text'] =\
             weatherservice.get_condition(condition, 'text')
         weather_data['forecasts'][i]['condition_image'] =\
             weatherservice.get_condition(condition, 'image')
         weather_data['forecasts'][i]['condition_icon'] =\
             weatherservice.get_condition(condition, 'icon-light')
     weather_data['forecast_information']['city'] =\
         gvfi('city', parsed_json)
     weather_data['forecast_information']['postal_code'] =\
         gvfi('zip', parsed_json)
     weather_data['forecast_information']['latitude_e6'] =\
         gvfi('latitude', parsed_json)
     weather_data['forecast_information']['longitude_e6'] =\
         gvfi('longitude', parsed_json)
     return weather_data
 def get_weather(self):
     weather_data = self.get_default_values()
     print('-------------------------------------------------------')
     print('-------------------------------------------------------')
     print('WorldWeatherOnline Weather Service url: %s' %
           (URL % (self.latitude, self.longitude, self.key)))
     print('-------------------------------------------------------')
     print('-------------------------------------------------------')
     try:
         parsed_json = read_json_from_url(
             URL % (self.latitude, self.longitude, self.key))
         if parsed_json is None or\
                 'data' not in parsed_json.keys() or\
                 parsed_json['data'] is None or\
                 'current_condition' not in parsed_json['data'].keys() or\
                 'weather' not in parsed_json['data'].keys():
             return weather_data
         weather_data['update_time'] = time.time()
         weather_data['ok'] = True
         number_condition = gvfco('weatherCode', parsed_json)
         condition = get_condition(number_condition)
         print('*******************')
         print('********11***********')
         print('*******************')
         #
         weather_data['current_conditions']['condition_text'] =\
             weatherservice.get_condition_wwa(condition, 'text')
         if weather_data['current_conditions']['isday']:
             weather_data['current_conditions']['condition_image'] =\
                 weatherservice.get_condition_wwa(condition, 'image')
             weather_data['current_conditions']['condition_icon_dark'] =\
                 weatherservice.get_condition_wwa(condition, 'icon-dark')
             weather_data['current_conditions']['condition_icon_light'] =\
                 weatherservice.get_condition_wwa(condition, 'icon-light')
         else:
             weather_data['current_conditions']['condition_image'] =\
                 weatherservice.get_condition_wwa(condition, 'image-night')
             weather_data['current_conditions']['condition_icon_dark'] =\
                 weatherservice.get_condition_wwa(
                     condition, 'icon-night-dark')
             weather_data['current_conditions']['condition_icon_light'] =\
                 weatherservice.get_condition_wwa(
                     condition, 'icon-night-light')
         temperature = cf.s2f(gvfco('temp_F', parsed_json))
         weather_data['current_conditions']['temperature'] =\
             cf.change_temperature(
                 temperature, self.units.temperature)
         pressure = cf.s2f(gvfco('pressure', parsed_json))
         weather_data['current_conditions']['pressure'] =\
             weatherservice.change_pressure(pressure, self.units.pressure)
         humidity = cf.s2f(gvfco('humidity', parsed_json))
         weather_data['current_conditions']['humidity'] = '%s %%' % (
             int(humidity))
         weather_data['current_conditions']['dew_point'] =\
             weatherservice.get_dew_point(
                 humidity, temperature, self.units.temperature)
         wind_velocity = cf.s2f(gvfco('windspeedMiles', parsed_json))
         wind_direction = weatherservice.degToCompass2(
             gvfco('winddirDegree', parsed_json))
         weather_data['current_conditions']['wind_condition'] =\
             weatherservice.get_wind_condition2(
                 wind_velocity, wind_direction[0], self.units.wind)
         weather_data['current_conditions']['wind_icon'] = wind_direction[2]
         #
         weather_data['current_conditions']['heat_index'] =\
             weatherservice.get_heat_index(temperature, humidity)
         weather_data['current_conditions']['windchill'] =\
             weatherservice.get_wind_chill(temperature, wind_velocity)
         #
         weather_data['current_conditions']['feels_like'] =\
             weatherservice.get_feels_like(
                 temperature, humidity, wind_velocity,
                 self.units.temperature)
         #
         weather_data['current_conditions']['visibility'] =\
             weatherservice.change_distance(
                 gvfco('visibility', parsed_json), self.units.visibility)
         weather_data['current_conditions']['solarradiation'] = None
         weather_data['current_conditions']['UV'] = None
         weather_data['current_conditions']['precip_1hr'] = None
         weather_data['current_conditions']['precip_today'] =\
             weatherservice.change_longitude(
                 cf.s2f(
                     gvfco('precipMM', parsed_json)) / 25.4,
                 self.units.rain)
         for i in range(0, 5):
             t1 = cf.s2f(gvff('tempMinF', i, parsed_json))
             t2 = cf.s2f(gvff('tempMaxF', i, parsed_json))
             if t1 < t2:
                 tmin = str(t1)
                 tmax = str(t2)
             else:
                 tmin = str(t2)
                 tmax = str(t1)
             weather_data['forecasts'][i]['low'] =\
                 cf.change_temperature(
                     tmin, self.units.temperature)
             weather_data['forecasts'][i]['high'] =\
                 cf.change_temperature(
                     tmax, self.units.temperature)
             #
             weather_data['forecasts'][i]['qpf_allday'] =\
                 weatherservice.change_longitude(
                     cf.s2f(
                         gvff('precipMM', i, parsed_json)) / 25.4,
                     self.units.rain)
             weather_data['forecasts'][i]['qpf_day'] = None
             weather_data['forecasts'][i]['qpf_night'] = None
             weather_data['forecasts'][i]['snow_allday'] = None
             weather_data['forecasts'][i]['snow_day'] = None
             weather_data['forecasts'][i]['snow_night'] = None
             weather_data['forecasts'][i]['maxwind'] = None
             winddir = gvff('winddirDegree', i, parsed_json)
             winsped = gvff('windspeedMiles', i, parsed_json)
             wind_direction = weatherservice.degToCompass2(winddir)
             weather_data['forecasts'][i]['avewind'] =\
                 weatherservice.get_wind_condition2(
                     winsped, wind_direction[0], self.units.wind)
             weather_data['forecasts'][i]['wind_icon'] = wind_direction[2]
             weather_data['forecasts'][i]['avehumidity'] = None
             weather_data['forecasts'][i]['maxhumidity'] = None
             weather_data['forecasts'][i]['minhumidity'] = None
             #
             number_condition = gvff('weatherCode', i, parsed_json).lower()
             condition = get_condition(number_condition)
             weather_data['forecasts'][i]['condition'] = condition
             weather_data['forecasts'][i]['condition_text'] =\
                 weatherservice.get_condition_wwa(condition, 'text')
             weather_data['forecasts'][i]['condition_image'] =\
                 weatherservice.get_condition_wwa(condition, 'image')
             weather_data['forecasts'][i]['condition_icon'] =\
                 weatherservice.get_condition_wwa(condition, 'icon-light')
         weather_data['forecast_information']['city'] = None
         weather_data['forecast_information']['postal_code'] = None
         weather_data['forecast_information']['latitude_e6'] = None
         weather_data['forecast_information']['longitude_e6'] = None
     except Exception as e:
         print(e)
         weather_data['ok'] = False
     return weather_data