-
Notifications
You must be signed in to change notification settings - Fork 5
/
openweather_sq9atk.py
executable file
·195 lines (165 loc) · 8.74 KB
/
openweather_sq9atk.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
import urllib2
import logging
from datetime import datetime
import json as JSON
import socket
from sr0wx_module import SR0WXModule
class OpenWeatherSq9atk(SR0WXModule):
"""Klasa pobierająca dane o promieniowaniu"""
def __init__(self, language, api_key, lat, lon, service_url):
self.__service_url = service_url
self.__lat = lat
self.__lon = lon
self.__api_key = api_key
self.__language = language
self.__logger = logging.getLogger(__name__)
self.events = {
200: 'burza_z_lekkimi_opadami_deszczu', # thunderstorm with light rain
201: 'burza_z_opadami_deszczu', # thunderstorm with rain
202: 'burza_z_silnymi_opadami_deszczu', # thunderstorm with heavy rain
210: 'niewielka_burza', # light thunderstorm
211: 'burza', # thunderstorm
212: 'silna_burza', # heavy thunderstorm
221: 'przelotna_burza', # ragged thunderstorm
230: 'burza_z_lekką_mżawką', # thunderstorm with light drizzle
231: 'burza_z_mżawką', # thunderstorm with drizzle
232: 'burza_z_silną_mżawką', # thunderstorm with heavy drizzle
300: 'lekka_mzawka', # light intensity drizzle
301: 'mzawka', # drizzle
302: 'silna_mzawka', # heavy intensity drizzle
310: 'lekki_mzacy_deszcz', # light intensity drizzle rain
311: 'mzacy_deszcz', # drizzle rain
312: 'silny_mzacy_deszcz', # heavy intensity drizzle rain
313: 'ulewa_z_mzawka', # shower rain and drizzle
314: 'silna_ulewa_z_mzawka', # heavy shower rain and drizzle
321: 'ulewa_z_mzawka', # shower drizzle
500: 'lekkie_opady_deszczu', # light rain 10d
501: 'umiarkowane_opady_deszczu ', # moderate rain 10d
502: 'intensywne_opady_deszczu', # heavy intensity rain 10d
503: 'bardzo_intensywne_opady_deszczu', # very heavy rain 10d
504: 'oberwanie_chmury', # extreme rain 10d
511: 'marznacy_deszcz', # freezing rain
520: 'lekka_ulewa', # light intensity shower rain 09d
521: 'ulewa', # shower rain 09d
522: 'silna_ulewa', # heavy intensity shower rain 09d
531: 'przelotna_ulewa', # ragged shower rain 09d
600: 'niewielkie_opady_sniegu', #light snow
601: 'opady_sniegu', #snow
602: 'intensywne_opady_sniegu', #heavy snow
611: 'snieg_z_deszczem', #sleet
612: 'snieg_z_deszczem', #shower sleet
615: 'snieg_z_niewielkim_deszczem', #light rain and snow
616: 'snieg_z_deszczem', #rain and snow
620: 'lekka_sniezyca', #light shower snow
621: 'śniezyca', #showersnow
622: 'intensywna_sniezyca', #heavy shower snow
701: 'zamglenia', # mist
711: 'zadymienie', # smoke
721: 'mgla', # haze
731: 'kusz_i_piach', # sand, dust whirls
741: 'mgla', # fog
751: 'piasek', # sand
761: 'pyl', # dust
762: 'pyl_wulkaniczny', # volcanic ash
771: 'szkwaly', # squalls
781: 'tornado', # tornado
800: 'bezchmurnie',
801: 'lekkie_zachmurzenie',
802: 'niewielkie_zachmurzenie',
803: 'zachmurzenie_umiarkowane',
804: 'pochmurno'
}
def downloadFile(self, url):
try:
webFile = urllib2.urlopen(url, None, 30)
return webFile.read()
except urllib2.URLError, e:
print e
except socket.timeout:
print "Timed out!"
return ""
def getHour(self):
time = ":".join([str(datetime.now().hour), str(datetime.now().minute)])
datetime_object = datetime.strptime(time, '%H:%M')
time_words = self.__language.read_datetime(datetime_object, '%H %M')
return time_words
def getWeather(self, json):
message = ' _ ';
for row in json:
if row['id'] in self.events:
message += ' ' + self.events[row['id']] + ' '
return message
def getClouds(self, json):
msg = ' ';
if json['all'] > 0:
msg += ' _ pokrywa_chmur ' + self.__language.read_percent( int(json['all']) )
return msg
def getMainConditions(self, json):
msg = ' _ '
msg += ' temperatura ' + self.__language.read_temperature( int(json['temp']) )
msg += ' cisnienie ' + self.__language.read_pressure( int(json['pressure']) )
msg += ' wilgotnosc ' + self.__language.read_percent( int(json['humidity']) )
return msg
def getVisibility(self, json):
msg = ' _ ';
msg += ' widocznosc ' + self.__language.read_distance( int(json/1000) )
return msg
def getWind(self, json):
msg = ' _ ';
msg += ' predkosc_wiatru '
msg += ' ' + self.__language.read_speed( int(json['speed']) )
msg += ' ' + self.__language.read_speed( int(json['speed']/1000*3600),'kmph')
if 'deg' in json:
msg += ' _ wiatr '
if 0 <= json['deg'] <= 23: msg += ' polnocny '
if 23 <= json['deg'] <= 67: msg += ' polnocno wschodni '
if 67 <= json['deg'] <= 112: msg += ' wschodni '
if 112 <= json['deg'] <= 157: msg += ' poludniowo wschodni '
if 157 <= json['deg'] <= 202: msg += ' poludniowy '
if 202 <= json['deg'] <= 247: msg += ' poludniowo zachodni '
if 247 <= json['deg'] <= 292: msg += ' zachodni '
if 292 <= json['deg'] <= 337: msg += ' polnocno zachodni '
if 337 <= json['deg'] <= 360: msg += ' polnocny '
msg += self.__language.read_degrees( int(json['deg']) )
return msg
def get_data(self):
self.__logger.info("::: Pobieram aktualne dane pogodowe...")
weather_service_url = self.__service_url + 'weather?lat=' + str(self.__lat) + '&lon='+str(self.__lon) + '&units=metric&appid=' + self.__api_key
self.__logger.info( weather_service_url )
weatherJson = JSON.loads( self.downloadFile(weather_service_url) )
self.__logger.info("::: Pobieram dane prognozy pogody...")
forecast_service_url = self.__service_url + 'forecast?lat=' + str(self.__lat) + '&lon='+str(self.__lon) + '&units=metric&appid=' + self.__api_key
self.__logger.info( forecast_service_url )
forecastJsonAll = JSON.loads( self.downloadFile(forecast_service_url) )
self.__logger.info("::: Przetwarzam dane...\n")
message = "".join([ \
" stan_pogody_z_godziny ",
self.getHour(), \
self.getWeather( weatherJson['weather'] ), \
self.getClouds( weatherJson['clouds'] ), \
self.getMainConditions( weatherJson['main'] ), \
#self.getVisibility( weatherJson['visibility'] ), \
self.getWind( weatherJson['wind'] ), \
])
forecastJson = forecastJsonAll['list'][1]
message += "".join([ \
" _ prognoza_na_nastepne cztery godziny ",
self.getWeather( forecastJson['weather'] ), \
self.getClouds( forecastJson['clouds'] ), \
self.getMainConditions( forecastJson['main'] ), \
self.getWind( forecastJson['wind'] ), \
])
forecastJson = forecastJsonAll['list'][4]
message += "".join([ \
" _ prognoza_na_nastepne dwanascie godzin ",
self.getWeather( forecastJson['weather'] ), \
self.getClouds( forecastJson['clouds'] ), \
self.getMainConditions( forecastJson['main'] ), \
self.getWind( forecastJson['wind'] ), \
])
return {
"message": message,
"source": "open_weather_map",
}