Dingyi6 commited on
Commit
08454d3
·
1 Parent(s): 17cf299

Upload 2 files

Browse files
Files changed (2) hide show
  1. grounded-nebula-392621-f192b882c364.json +13 -0
  2. utils.py +414 -0
grounded-nebula-392621-f192b882c364.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "service_account",
3
+ "project_id": "grounded-nebula-392621",
4
+ "private_key_id": "f192b882c3648df7222b31cd060cd425a68ff824",
5
+ "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDVU7b9UcZAifgb\nWdaMGTxAqeDNTqMnVjrIAg6LKfkTVIERtj60UyQYtUUvyJfUeggpRWB40YY0nrtc\nqsfGGiOxQh1AyB7DF2Q9uoBOpRIkwfPbhAP9ofa1T7yuf8aBje+Sm8dWHoXk3OQd\nqIr0QBFUDqomTbQ+Q5btRnOuAy628mnHYFCmbapQ6mnFaLZzF8e4PybvjwhQMlNs\n4LA+3Ugjss/0g0/RzZ9VIlxOkwFc9MAW+30KNYOmVOfFxxpxS+1+d30L57QYjNb0\n1F4W1EKb3RZQ+uUhaHXV7ptueXyAqcg+8IxUBw3siHzUZktBs/qzUlLaKfybBRw+\nUxtJxspbAgMBAAECggEAXDMbYq8GNXysC/4vGUwK25PQgkubfnPpYeppqMISUcVz\nJ1mSDlPkxP0LkxRqcr3vaw7+HBnKnFGCfxGc2EUR6hm+FPKpQP6KJ5fEvrjfd52Q\nLO8I3oUy4Lg+v1igTfwvcDj91X3Jttm1ig//RoOuOZtA9N8eqM6Dm7eYZbwgY5bl\n8/7jpibfGa5lodkbNcwbFHGgJYbBaBW8uGtnXleMongOjcD6ZGIHfgRhE0YyDFUO\n6x2z4JPkDN9UqPyIXysBHEYPj5EI8FLy5N5/9Hn42wa/57XSruWUPp3smfr6R1Qu\nAY/MLCN8Mrp7HlsRrEnCESNDcX75Nup9Pzj5VDyM4QKBgQDyxbGGsg5yGbN8W09j\nsrsqdyyeyc8EksZ57saKtxoO1EQYnYBnuC4hKBr7ivgQ7Goph5dzybohLHN942j1\nWIbOJUjWaWiH5N/74V3rBdMe04j1PEEn254nsC8dRA5RDMF0w/QV4B72fQNduiqp\nDPkvpkASWmlBItTsTVbzhwZ1CwKBgQDg804IIqQ9etT/lBnD/SFO73QLxlr4jWkP\nAUAwc1HJ6tfF63kV6QNateaWY67Yz0Rlqcj2iCC/FMKuBLzCjwTo6Qda+z57xMxz\nUm0yOnZSp0MoFMqQgEphfKV6yU9Eaa5z+7Tbf2Wd2uu/swbg+vkm3lnj+s0CKlQ2\nCRijURKx8QKBgQCnA7Yzsf8aI/BElxSww97bQg1iV/ehb9A3Rjs0Zu74ULNgM8qI\nkD679LlLX7l0+w+17mAU+iygcdIqQu6MCxECdMf9KZsOEji9MbfI3cL2LBTGkWNJ\npl7RcvWWrqEixSG50Kz097CVZj+QlWiP0CsFytu9RJGwi+PrhPFSrAuXLQKBgQDb\nPEVQqHJpeM0eSbjSymEsDTOMRkVi+G7rsMxebAXKRJcGzfe04uPiBGY3K++8XkTK\n0C6MFx/TGuihsPxGohym4nXIthSvi522xx6lVVT8OQe6iIjjTCUx3clpYclfY6Ai\naa5aPk9LCZG5w0FxAyjQOORizIwBEEACadsZUGpoAQKBgQDHHpwxmUaQx/5JSR2f\nIi4sBn2fv/s9nlgHcGFm/QqpM6+qXwgP/A8O7OSj25rLX52yAzVF6BOB6FdmBcKc\nr/YohZcZu1knjbkam4UqUslPslfHrMTUez70NfgzuaK4mc5GJxLJtnrdiLc2mTXZ\ndI6tvmuoOPCBMoT7e1plP+gNIg==\n-----END PRIVATE KEY-----\n",
6
+ "client_email": "grounded-nebula-392621@appspot.gserviceaccount.com",
7
+ "client_id": "110195421223576784734",
8
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
9
+ "token_uri": "https://oauth2.googleapis.com/token",
10
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/grounded-nebula-392621%40appspot.gserviceaccount.com",
12
+ "universe_domain": "googleapis.com"
13
+ }
utils.py ADDED
@@ -0,0 +1,414 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import traceback
2
+ from typing import Any
3
+
4
+ def print_with_line_number(message):
5
+ line_number = traceback.extract_stack()[-2][1]
6
+ line_length = 30 # Length of cutting line
7
+ print(f"\033[92mLine {line_number}\033[0m \033[92m{'=' * line_length}\033[0m")
8
+ print(f"{message}")
9
+
10
+
11
+ class HttpResponse:
12
+ def __init__(self, status: int, data: Any):
13
+ self.status = status
14
+ self.data = data
15
+
16
+ # async def get_url(
17
+ # url: str, type: Literal["string", "bytes", "json"] = "string"
18
+ # ) -> HttpResponse:
19
+ # """
20
+ # An async wrapper function for http requests that works in both regular Python and
21
+ # Pyodide.
22
+
23
+ # In Pyodide, it uses the pyodide.http.pyfetch() function, which is a wrapper for the
24
+ # JavaScript fetch() function. pyfetch() is asynchronous, so this whole function must
25
+ # also be async.
26
+
27
+ # In regular Python, it uses the urllib.request.urlopen() function.
28
+
29
+ # Args:
30
+ # url: The URL to download.
31
+
32
+ # type: How to parse the content. If "string", it returns the response as a
33
+ # string. If "bytes", it returns the response as a bytes object. If "json", it
34
+ # parses the reponse as JSON, then converts it to a Python object, usually a
35
+ # dictionary or list.
36
+
37
+ # Returns:
38
+ # A HttpResponse object
39
+ # """
40
+ # import sys
41
+
42
+ # if "pyodide" in sys.modules:
43
+ # import pyodide.http
44
+
45
+ # response = await pyodide.http.pyfetch(url)
46
+
47
+ # if type == "json":
48
+ # # .json() parses the response as JSON and converts to dictionary.
49
+ # data = await response.json()
50
+ # elif type == "string":
51
+ # # .string() returns the response as a string.
52
+ # data = await response.string()
53
+ # elif type == "bytes":
54
+ # # .bytes() returns the response as a byte object.
55
+ # data = await response.bytes()
56
+
57
+ # return HttpResponse(response.status, data)
58
+
59
+ # else:
60
+ # import urllib.request
61
+
62
+ # response = urllib.request.urlopen(url)
63
+ # if type == "json":
64
+ # data = json.loads(response.read().decode("utf-8"))
65
+ # elif type == "string":
66
+ # data = response.read().decode("utf-8")
67
+ # elif type == "bytes":
68
+ # data = response.read()
69
+
70
+ # return HttpResponse(response.status, data)
71
+
72
+ datafields = {
73
+ "cloudBase": "cloudBase(km)",
74
+ "cloudCeiling": "cloudCeiling(km)",
75
+ "dewPoint": "dewPoint(℃)",
76
+ "evapotranspiration": "evapotranspiration(mm)",
77
+ "freezingRainIntensity": "freezingRainIntensity(mm/hr)",
78
+ "humidity": "humidity(%)",
79
+ "iceAccumulation": "iceAccumulation(mm)",
80
+ "pressureSurfaceLevel": "pressureSurfaceLevel(hPa)",
81
+ "rainAccumulation": "rainAccumulation(mm)",
82
+ "rainIntensity": "rainIntensity(mm/hr)",
83
+ "sleetAccumulation": "sleetAccumulation(mm)",
84
+ "sleetIntensity": "sleetIntensity(mm/hr)",
85
+ "snowAccumulation": "snowAccumulation(mm)",
86
+ "snowDepth": "snowDepth(cm)",
87
+ "snowIntensity": "snowIntensity(mm/hr)",
88
+ "temperature": "temperature(℃)",
89
+ "temperatureApparent": "temperatureApparent(℃)",
90
+ "uvHealthConcern": "uvHealthConcern",
91
+ "uvIndex": "uvIndex",
92
+ "visibility": "visibility(km)",
93
+ "windDirection": "windDirection(°)",
94
+ "windGust": "windGust(m/s)",
95
+ "windSpeed": "windSpeed(m/s)"
96
+ }
97
+
98
+ weatherCode = {
99
+ "0": "Unknown",
100
+ "1000": "Clear, Sunny",
101
+ "1100": "Mostly Clear",
102
+ "1101": "Partly Cloudy",
103
+ "1102": "Mostly Cloudy",
104
+ "1001": "Cloudy",
105
+ "2000": "Fog",
106
+ "2100": "Light Fog",
107
+ "4000": "Drizzle",
108
+ "4001": "Rain",
109
+ "4200": "Light Rain",
110
+ "4201": "Heavy Rain",
111
+ "5000": "Snow",
112
+ "5001": "Flurries",
113
+ "5100": "Light Snow",
114
+ "5101": "Heavy Snow",
115
+ "6000": "Freezing Drizzle",
116
+ "6001": "Freezing Rain",
117
+ "6200": "Light Freezing Rain",
118
+ "6201": "Heavy Freezing Rain",
119
+ "7000": "Ice Pellets",
120
+ "7101": "Heavy Ice Pellets",
121
+ "7102": "Light Ice Pellets",
122
+ "8000": "Thunderstorm"
123
+ },
124
+
125
+ weatherCodeFullDay = {
126
+ "0": "Unknown",
127
+ "1000": "Clear, Sunny",
128
+ "1100": "Mostly Clear",
129
+ "1101": "Partly Cloudy",
130
+ "1102": "Mostly Cloudy",
131
+ "1001": "Cloudy",
132
+ "1103": "Partly Cloudy and Mostly Clear",
133
+ "2100": "Light Fog",
134
+ "2101": "Mostly Clear and Light Fog",
135
+ "2102": "Partly Cloudy and Light Fog",
136
+ "2103": "Mostly Cloudy and Light Fog",
137
+ "2106": "Mostly Clear and Fog",
138
+ "2107": "Partly Cloudy and Fog",
139
+ "2108": "Mostly Cloudy and Fog",
140
+ "2000": "Fog",
141
+ "4204": "Partly Cloudy and Drizzle",
142
+ "4203": "Mostly Clear and Drizzle",
143
+ "4205": "Mostly Cloudy and Drizzle",
144
+ "4000": "Drizzle",
145
+ "4200": "Light Rain",
146
+ "4213": "Mostly Clear and Light Rain",
147
+ "4214": "Partly Cloudy and Light Rain",
148
+ "4215": "Mostly Cloudy and Light Rain",
149
+ "4209": "Mostly Clear and Rain",
150
+ "4208": "Partly Cloudy and Rain",
151
+ "4210": "Mostly Cloudy and Rain",
152
+ "4001": "Rain",
153
+ "4211": "Mostly Clear and Heavy Rain",
154
+ "4202": "Partly Cloudy and Heavy Rain",
155
+ "4212": "Mostly Cloudy and Heavy Rain",
156
+ "4201": "Heavy Rain",
157
+ "5115": "Mostly Clear and Flurries",
158
+ "5116": "Partly Cloudy and Flurries",
159
+ "5117": "Mostly Cloudy and Flurries",
160
+ "5001": "Flurries",
161
+ "5100": "Light Snow",
162
+ "5102": "Mostly Clear and Light Snow",
163
+ "5103": "Partly Cloudy and Light Snow",
164
+ "5104": "Mostly Cloudy and Light Snow",
165
+ "5122": "Drizzle and Light Snow",
166
+ "5105": "Mostly Clear and Snow",
167
+ "5106": "Partly Cloudy and Snow",
168
+ "5107": "Mostly Cloudy and Snow",
169
+ "5000": "Snow",
170
+ "5101": "Heavy Snow",
171
+ "5119": "Mostly Clear and Heavy Snow",
172
+ "5120": "Partly Cloudy and Heavy Snow",
173
+ "5121": "Mostly Cloudy and Heavy Snow",
174
+ "5110": "Drizzle and Snow",
175
+ "5108": "Rain and Snow",
176
+ "5114": "Snow and Freezing Rain",
177
+ "5112": "Snow and Ice Pellets",
178
+ "6000": "Freezing Drizzle",
179
+ "6003": "Mostly Clear and Freezing drizzle",
180
+ "6002": "Partly Cloudy and Freezing drizzle",
181
+ "6004": "Mostly Cloudy and Freezing drizzle",
182
+ "6204": "Drizzle and Freezing Drizzle",
183
+ "6206": "Light Rain and Freezing Drizzle",
184
+ "6205": "Mostly Clear and Light Freezing Rain",
185
+ "6203": "Partly Cloudy and Light Freezing Rain",
186
+ "6209": "Mostly Cloudy and Light Freezing Rain",
187
+ "6200": "Light Freezing Rain",
188
+ "6213": "Mostly Clear and Freezing Rain",
189
+ "6214": "Partly Cloudy and Freezing Rain",
190
+ "6215": "Mostly Cloudy and Freezing Rain",
191
+ "6001": "Freezing Rain",
192
+ "6212": "Drizzle and Freezing Rain",
193
+ "6220": "Light Rain and Freezing Rain",
194
+ "6222": "Rain and Freezing Rain",
195
+ "6207": "Mostly Clear and Heavy Freezing Rain",
196
+ "6202": "Partly Cloudy and Heavy Freezing Rain",
197
+ "6208": "Mostly Cloudy and Heavy Freezing Rain",
198
+ "6201": "Heavy Freezing Rain",
199
+ "7110": "Mostly Clear and Light Ice Pellets",
200
+ "7111": "Partly Cloudy and Light Ice Pellets",
201
+ "7112": "Mostly Cloudy and Light Ice Pellets",
202
+ "7102": "Light Ice Pellets",
203
+ "7108": "Mostly Clear and Ice Pellets",
204
+ "7107": "Partly Cloudy and Ice Pellets",
205
+ "7109": "Mostly Cloudy and Ice Pellets",
206
+ "7000": "Ice Pellets",
207
+ "7105": "Drizzle and Ice Pellets",
208
+ "7106": "Freezing Rain and Ice Pellets",
209
+ "7115": "Light Rain and Ice Pellets",
210
+ "7117": "Rain and Ice Pellets",
211
+ "7103": "Freezing Rain and Heavy Ice Pellets",
212
+ "7113": "Mostly Clear and Heavy Ice Pellets",
213
+ "7114": "Partly Cloudy and Heavy Ice Pellets",
214
+ "7116": "Mostly Cloudy and Heavy Ice Pellets",
215
+ "7101": "Heavy Ice Pellets",
216
+ "8001": "Mostly Clear and Thunderstorm",
217
+ "8003": "Partly Cloudy and Thunderstorm",
218
+ "8002": "Mostly Cloudy and Thunderstorm",
219
+ "8000": "Thunderstorm"
220
+ },
221
+
222
+ weatherCodeDay = {
223
+ "0": "Unknown",
224
+ "10000": "Clear, Sunny",
225
+ "11000": "Mostly Clear",
226
+ "11010": "Partly Cloudy",
227
+ "11020": "Mostly Cloudy",
228
+ "10010": "Cloudy",
229
+ "11030": "Partly Cloudy and Mostly Clear",
230
+ "21000": "Light Fog",
231
+ "21010": "Mostly Clear and Light Fog",
232
+ "21020": "Partly Cloudy and Light Fog",
233
+ "21030": "Mostly Cloudy and Light Fog",
234
+ "21060": "Mostly Clear and Fog",
235
+ "21070": "Partly Cloudy and Fog",
236
+ "21080": "Mostly Cloudy and Fog",
237
+ "20000": "Fog",
238
+ "42040": "Partly Cloudy and Drizzle",
239
+ "42030": "Mostly Clear and Drizzle",
240
+ "42050": "Mostly Cloudy and Drizzle",
241
+ "40000": "Drizzle",
242
+ "42000": "Light Rain",
243
+ "42130": "Mostly Clear and Light Rain",
244
+ "42140": "Partly Cloudy and Light Rain",
245
+ "42150": "Mostly Cloudy and Light Rain",
246
+ "42090": "Mostly Clear and Rain",
247
+ "42080": "Partly Cloudy and Rain",
248
+ "42100": "Mostly Cloudy and Rain",
249
+ "40010": "Rain",
250
+ "42110": "Mostly Clear and Heavy Rain",
251
+ "42020": "Partly Cloudy and Heavy Rain",
252
+ "42120": "Mostly Cloudy and Heavy Rain",
253
+ "42010": "Heavy Rain",
254
+ "51150": "Mostly Clear and Flurries",
255
+ "51160": "Partly Cloudy and Flurries",
256
+ "51170": "Mostly Cloudy and Flurries",
257
+ "50010": "Flurries",
258
+ "51000": "Light Snow",
259
+ "51020": "Mostly Clear and Light Snow",
260
+ "51030": "Partly Cloudy and Light Snow",
261
+ "51040": "Mostly Cloudy and Light Snow",
262
+ "51220": "Drizzle and Light Snow",
263
+ "51050": "Mostly Clear and Snow",
264
+ "51060": "Partly Cloudy and Snow",
265
+ "51070": "Mostly Cloudy and Snow",
266
+ "50000": "Snow",
267
+ "51010": "Heavy Snow",
268
+ "51190": "Mostly Clear and Heavy Snow",
269
+ "51200": "Partly Cloudy and Heavy Snow",
270
+ "51210": "Mostly Cloudy and Heavy Snow",
271
+ "51100": "Drizzle and Snow",
272
+ "51080": "Rain and Snow",
273
+ "51140": "Snow and Freezing Rain",
274
+ "51120": "Snow and Ice Pellets",
275
+ "60000": "Freezing Drizzle",
276
+ "60030": "Mostly Clear and Freezing drizzle",
277
+ "60020": "Partly Cloudy and Freezing drizzle",
278
+ "60040": "Mostly Cloudy and Freezing drizzle",
279
+ "62040": "Drizzle and Freezing Drizzle",
280
+ "62060": "Light Rain and Freezing Drizzle",
281
+ "62050": "Mostly Clear and Light Freezing Rain",
282
+ "62030": "Partly Cloudy and Light Freezing Rain",
283
+ "62090": "Mostly Cloudy and Light Freezing Rain",
284
+ "62000": "Light Freezing Rain",
285
+ "62130": "Mostly Clear and Freezing Rain",
286
+ "62140": "Partly Cloudy and Freezing Rain",
287
+ "62150": "Mostly Cloudy and Freezing Rain",
288
+ "60010": "Freezing Rain",
289
+ "62120": "Drizzle and Freezing Rain",
290
+ "62200": "Light Rain and Freezing Rain",
291
+ "62220": "Rain and Freezing Rain",
292
+ "62070": "Mostly Clear and Heavy Freezing Rain",
293
+ "62020": "Partly Cloudy and Heavy Freezing Rain",
294
+ "62080": "Mostly Cloudy and Heavy Freezing Rain",
295
+ "62010": "Heavy Freezing Rain",
296
+ "71100": "Mostly Clear and Light Ice Pellets",
297
+ "71110": "Partly Cloudy and Light Ice Pellets",
298
+ "71120": "Mostly Cloudy and Light Ice Pellets",
299
+ "71020": "Light Ice Pellets",
300
+ "71080": "Mostly Clear and Ice Pellets",
301
+ "71070": "Partly Cloudy and Ice Pellets",
302
+ "71090": "Mostly Cloudy and Ice Pellets",
303
+ "70000": "Ice Pellets",
304
+ "71050": "Drizzle and Ice Pellets",
305
+ "71060": "Freezing Rain and Ice Pellets",
306
+ "71150": "Light Rain and Ice Pellets",
307
+ "71170": "Rain and Ice Pellets",
308
+ "71030": "Freezing Rain and Heavy Ice Pellets",
309
+ "71130": "Mostly Clear and Heavy Ice Pellets",
310
+ "71140": "Partly Cloudy and Heavy Ice Pellets",
311
+ "71160": "Mostly Cloudy and Heavy Ice Pellets",
312
+ "71010": "Heavy Ice Pellets",
313
+ "80010": "Mostly Clear and Thunderstorm",
314
+ "80030": "Partly Cloudy and Thunderstorm",
315
+ "80020": "Mostly Cloudy and Thunderstorm",
316
+ "80000": "Thunderstorm"
317
+ },
318
+
319
+ weatherCodeNight = {
320
+ "0": "Unknown",
321
+ "10001": "Clear",
322
+ "11001": "Mostly Clear",
323
+ "11011": "Partly Cloudy",
324
+ "11021": "Mostly Cloudy",
325
+ "10011": "Cloudy",
326
+ "11031": "Partly Cloudy and Mostly Clear",
327
+ "21001": "Light Fog",
328
+ "21011": "Mostly Clear and Light Fog",
329
+ "21021": "Partly Cloudy and Light Fog",
330
+ "21031": "Mostly Cloudy and Light Fog",
331
+ "21061": "Mostly Clear and Fog",
332
+ "21071": "Partly Cloudy and Fog",
333
+ "21081": "Mostly Cloudy and Fog",
334
+ "20001": "Fog",
335
+ "42041": "Partly Cloudy and Drizzle",
336
+ "42031": "Mostly Clear and Drizzle",
337
+ "42051": "Mostly Cloudy and Drizzle",
338
+ "40001": "Drizzle",
339
+ "42001": "Light Rain",
340
+ "42131": "Mostly Clear and Light Rain",
341
+ "42141": "Partly Cloudy and Light Rain",
342
+ "42151": "Mostly Cloudy and Light Rain",
343
+ "42091": "Mostly Clear and Rain",
344
+ "42081": "Partly Cloudy and Rain",
345
+ "42101": "Mostly Cloudy and Rain",
346
+ "40011": "Rain",
347
+ "42111": "Mostly Clear and Heavy Rain",
348
+ "42021": "Partly Cloudy and Heavy Rain",
349
+ "42121": "Mostly Cloudy and Heavy Rain",
350
+ "42011": "Heavy Rain",
351
+ "51151": "Mostly Clear and Flurries",
352
+ "51161": "Partly Cloudy and Flurries",
353
+ "51171": "Mostly Cloudy and Flurries",
354
+ "50011": "Flurries",
355
+ "51001": "Light Snow",
356
+ "51021": "Mostly Clear and Light Snow",
357
+ "51031": "Partly Cloudy and Light Snow",
358
+ "51041": "Mostly Cloudy and Light Snow",
359
+ "51221": "Drizzle and Light Snow",
360
+ "51051": "Mostly Clear and Snow",
361
+ "51061": "Partly Cloudy and Snow",
362
+ "51071": "Mostly Cloudy and Snow",
363
+ "50001": "Snow",
364
+ "51011": "Heavy Snow",
365
+ "51191": "Mostly Clear and Heavy Snow",
366
+ "51201": "Partly Cloudy and Heavy Snow",
367
+ "51211": "Mostly Cloudy and Heavy Snow",
368
+ "51101": "Drizzle and Snow",
369
+ "51081": "Rain and Snow",
370
+ "51141": "Snow and Freezing Rain",
371
+ "51121": "Snow and Ice Pellets",
372
+ "60001": "Freezing Drizzle",
373
+ "60031": "Mostly Clear and Freezing drizzle",
374
+ "60021": "Partly Cloudy and Freezing drizzle",
375
+ "60041": "Mostly Cloudy and Freezing drizzle",
376
+ "62041": "Drizzle and Freezing Drizzle",
377
+ "62061": "Light Rain and Freezing Drizzle",
378
+ "62051": "Mostly Clear and Light Freezing Rain",
379
+ "62031": "Partly cloudy and Light Freezing Rain",
380
+ "62091": "Mostly Cloudy and Light Freezing Rain",
381
+ "62001": "Light Freezing Rain",
382
+ "62131": "Mostly Clear and Freezing Rain",
383
+ "62141": "Partly Cloudy and Freezing Rain",
384
+ "62151": "Mostly Cloudy and Freezing Rain",
385
+ "60011": "Freezing Rain",
386
+ "62121": "Drizzle and Freezing Rain",
387
+ "62201": "Light Rain and Freezing Rain",
388
+ "62221": "Rain and Freezing Rain",
389
+ "62071": "Mostly Clear and Heavy Freezing Rain",
390
+ "62021": "Partly Cloudy and Heavy Freezing Rain",
391
+ "62081": "Mostly Cloudy and Heavy Freezing Rain",
392
+ "62011": "Heavy Freezing Rain",
393
+ "71101": "Mostly Clear and Light Ice Pellets",
394
+ "71111": "Partly Cloudy and Light Ice Pellets",
395
+ "71121": "Mostly Cloudy and Light Ice Pellets",
396
+ "71021": "Light Ice Pellets",
397
+ "71081": "Mostly Clear and Ice Pellets",
398
+ "71071": "Partly Cloudy and Ice Pellets",
399
+ "71091": "Mostly Cloudy and Ice Pellets",
400
+ "70001": "Ice Pellets",
401
+ "71051": "Drizzle and Ice Pellets",
402
+ "71061": "Freezing Rain and Ice Pellets",
403
+ "71151": "Light Rain and Ice Pellets",
404
+ "71171": "Rain and Ice Pellets",
405
+ "71031": "Freezing Rain and Heavy Ice Pellets",
406
+ "71131": "Mostly Clear and Heavy Ice Pellets",
407
+ "71141": "Partly Cloudy and Heavy Ice Pellets",
408
+ "71161": "Mostly Cloudy and Heavy Ice Pellets",
409
+ "71011": "Heavy Ice Pellets",
410
+ "80011": "Mostly Clear and Thunderstorm",
411
+ "80031": "Partly Cloudy and Thunderstorm",
412
+ "80021": "Mostly Cloudy and Thunderstorm",
413
+ "80001": "Thunderstorm"
414
+ }