Merge lp:~martin-borho/ubuntu-weather-app/TimeAndDate into lp:ubuntu-weather-app/obsolete.trunk

Proposed by Martin Borho
Status: Merged
Approved by: Martin Borho
Approved revision: 119
Merged at revision: 120
Proposed branch: lp:~martin-borho/ubuntu-weather-app/TimeAndDate
Merge into: lp:ubuntu-weather-app/obsolete.trunk
Diff against target: 514 lines (+191/-99)
7 files modified
components/CurrentWeather.qml (+2/-1)
components/LastUpdatedComponent.qml (+2/-2)
components/LocationManagerSheet.qml (+1/-1)
components/LocationTab.qml (+8/-35)
components/WeatherApi.js (+164/-46)
tests/autopilot/ubuntu_weather_app/tests/test_settings.py (+12/-12)
tests/autopilot/ubuntu_weather_app/tests/weatherdata.py (+2/-2)
To merge this branch: bzr merge lp:~martin-borho/ubuntu-weather-app/TimeAndDate
Reviewer Review Type Date Requested Status
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Raúl Yeguas Approve
David Planella Needs Fixing
Review via email: mp+185907@code.launchpad.net

Commit message

Locations now with their local date and time, "Updated" label now relative

Description of the change

* dates in weather data are now relating to the local time of the location
* "Updated" label now relative

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
David Planella (dpm) wrote :

29 + updatedLabel += i18n.tr("just now")

Both the calculator and the RSS reader use the same functions for relative time. I'd suggest to reuse those, which also take care of message plurals for internationalization.

Although I believe that the calculator app's design got recently changed not to use the relative times, RSS still does, and it might be worth sharing the code.

review: Needs Fixing
Revision history for this message
Martin Borho (martin-borho) wrote :

OKay, I'll will have a look at it!

Revision history for this message
Martin Borho (martin-borho) wrote :

Using the wording for the updated label as it was, like discussed in the design meeting.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Raúl Yeguas (neokore) wrote :

Looks good. Great work, Martin!

review: Approve
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
119. By Martin Borho

merged from trunk

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'components/CurrentWeather.qml'
2--- components/CurrentWeather.qml 2013-09-18 17:12:55 +0000
3+++ components/CurrentWeather.qml 2013-09-20 16:48:49 +0000
4@@ -86,7 +86,8 @@
5 var temp = currentWeather.hourly.get(hourIndex)[mainView.settings["units"]].temp;
6 currentConditionTempContent.currentTemp = temp;
7 adjustBackground(Math.round(temp));
8- var dateTime = new Date(currentWeather.hourly.get(hourIndex).date);
9+ var dateData = currentWeather.hourly.get(hourIndex).date;
10+ var dateTime = new Date(dateData.year, dateData.month, dateData.date, dateData.hours, dateData.minutes)
11 var dateTimeString = Qt.formatDateTime(dateTime, 'dddd, dd MMMM - HH:mm');
12 dateComponent.dateString = dateTimeString;
13 dateComponent.renderText();
14
15=== modified file 'components/LastUpdatedComponent.qml'
16--- components/LastUpdatedComponent.qml 2013-09-06 11:50:23 +0000
17+++ components/LastUpdatedComponent.qml 2013-09-20 16:48:49 +0000
18@@ -30,12 +30,12 @@
19
20 onUpdateDateChanged: {
21 var updatedLabel = i18n.tr("Updated: "),
22- updated = new Date(updateDate*1000),
23+ updated = new Date(parseInt(updateDate)),
24 updateTime = Qt.formatTime(updated, 'HH:mm');
25 if(Qt.formatDateTime(updated, "yyyy-MM-dd") === Qt.formatDateTime(new Date(), "yyyy-MM-dd")) {
26 updatedLabel += i18n.tr("Today, ")+updateTime;
27 } else {
28- updatedLabel += Qt.formatDate(updated, 'dddd, dd MMMM ')+updateTime
29+ updatedLabel += Qt.formatDate(updated, 'dddd, dd MMMM ')+updateTime;
30 }
31 lastUpdatedLabel.text = updatedLabel
32 }
33
34=== modified file 'components/LocationManagerSheet.qml'
35--- components/LocationManagerSheet.qml 2013-09-12 16:20:32 +0000
36+++ components/LocationManagerSheet.qml 2013-09-20 16:48:49 +0000
37@@ -134,7 +134,7 @@
38 anchors.fill: parent
39 onClicked: {
40 // add dummy location
41- addLocation({"service_id":2643743,"name":"London","country":"GB","service":"openweathermap"})
42+ addLocation({"coord":{"lon":-0.12574,"lat":51.50853},"service_id":2643743,"name":"London","country":"GB","service":"openweathermap"})
43 lookupItemAddButton.visible = false;
44 }
45 }
46
47=== modified file 'components/LocationTab.qml'
48--- components/LocationTab.qml 2013-09-10 18:21:23 +0000
49+++ components/LocationTab.qml 2013-09-20 16:48:49 +0000
50@@ -29,16 +29,11 @@
51 property int locationIndex: 0
52 property var locationData: {}
53
54- function formatTimestamp(timestamp, format) {
55- var date = new Date(timestamp*1000);
56+ function formatTimestamp(dateData, format) {
57+ var date = new Date(dateData.year, dateData.month, dateData.date, dateData.hours, dateData.minutes)
58 return Qt.formatDate(date, format)
59 }
60
61- function formatTimestampToTime(timestamp, format) {
62- var date = new Date(timestamp*1000);
63- return Qt.formatTime(date, format)
64- }
65-
66 onVisibleChanged: {
67 var currentIndex = dailyForecastList.currentIndex;
68 if(visible == true && currentIndex > -1) {
69@@ -52,42 +47,20 @@
70 units = (mainView.settings.units === 'imperial') ? 'imperial' : 'metric',
71 wind_units = (mainView.settings.wind_units === 'mph') ? 'imperial' : 'metric',
72 dailyForecasts = locData.data,
73- dailyLength = dailyForecasts.length;
74+ dailyLength = (dailyForecasts) ? dailyForecasts.length : 0;
75
76 // set location data as property
77 locationData = locData;
78
79+ // set last updated label
80+ lastUpdatedComponent.updateDate = (locationData.updated) ? locationData.updated : new Date().getTime()
81+
82 // set daily forecasts
83 for(var x=0;x<dailyLength;x++) {
84- var direction = "?";
85- var degrees = dailyForecasts[x].windDeg;
86- if(degrees >=0 && degrees <= 30){
87- direction = "N";
88- } else if(degrees >30 && degrees <= 60){
89- direction = "NE";
90- } else if(degrees >60 && degrees <= 120){
91- direction = "E";
92- } else if(degrees >120 && degrees <= 150){
93- direction = "SE";
94- } else if(degrees >150 && degrees <= 210){
95- direction = "S";
96- } else if(degrees >210 && degrees <= 240){
97- direction = "SW";
98- } else if(degrees >240 && degrees <= 300){
99- direction = "W";
100- } else if(degrees >300 && degrees <= 330){
101- direction = "NW";
102- }else if(degrees >330 && degrees <= 360){
103- direction = "N";
104- }
105- // set last updated label
106- if(x===0 && dailyForecasts[x].current) {
107- lastUpdatedComponent.updateDate = dailyForecasts[x].current.timestamp;
108- }
109 //
110 dayForecastModel.append({
111 dateRel: "",//Tomorrow",
112- date: formatTimestamp(dailyForecasts[x].timestamp, 'dddd, dd MMMM'),
113+ date: formatTimestamp(dailyForecasts[x].date, 'dddd, dd MMMM'),
114 temp: (dailyForecasts[x]["current"] === undefined) ? dailyForecasts[x][units].tempMax :
115 dailyForecasts[x]["current"][units].temp,
116 tempMin: dailyForecasts[x][units].tempMin,
117@@ -96,7 +69,7 @@
118 cond: dailyForecasts[x].condition.id,
119 condIcon: dailyForecasts[x].icon,
120 wind_speed: dailyForecasts[x][wind_units].windSpeed,
121- wind_dir: direction,
122+ wind_dir: dailyForecasts[x].windDir,
123 humid: dailyForecasts[x].humidity,
124 precip: +(dailyForecasts[x][units].rain || dailyForecasts[x][units].snow || 0).toFixed(2),
125 press: dailyForecasts[x].pressure,
126
127=== modified file 'components/WeatherApi.js'
128--- components/WeatherApi.js 2013-09-18 17:04:41 +0000
129+++ components/WeatherApi.js 2013-09-20 16:48:49 +0000
130@@ -3,7 +3,7 @@
131 * Version of the response data format.
132 * Increase this number to force a refresh.
133 */
134-var RESPONSE_DATA_VERSION = 20130827;
135+var RESPONSE_DATA_VERSION = 20130916;
136
137 /**
138 * Helper functions
139@@ -11,15 +11,95 @@
140 function calcFahrenheit(celsius) {
141 return celsius * 1.8 + 32;
142 }
143+//
144 function calcMph(ms) {
145 return ms*2.24;
146 }
147+//
148 function calcInch(mm) {
149 return mm/25.4;
150 }
151+//
152 function calcKmh(ms) {
153 return ms*3.6;
154 }
155+//
156+function calcWindDir(degrees) {
157+ var direction = "?";
158+ if(degrees >=0 && degrees <= 30){
159+ direction = "N";
160+ } else if(degrees >30 && degrees <= 60){
161+ direction = "NE";
162+ } else if(degrees >60 && degrees <= 120){
163+ direction = "E";
164+ } else if(degrees >120 && degrees <= 150){
165+ direction = "SE";
166+ } else if(degrees >150 && degrees <= 210){
167+ direction = "S";
168+ } else if(degrees >210 && degrees <= 240){
169+ direction = "SW";
170+ } else if(degrees >240 && degrees <= 300){
171+ direction = "W";
172+ } else if(degrees >300 && degrees <= 330){
173+ direction = "NW";
174+ } else if(degrees >330 && degrees <= 360){
175+ direction = "N";
176+ }
177+ return direction;
178+}
179+
180+//
181+function getLocationTime(tstamp) {
182+ var locTime = new Date(tstamp);
183+ return {
184+ year: locTime.getUTCFullYear(),
185+ month: locTime.getUTCMonth(),
186+ date: locTime.getUTCDate(),
187+ hours: locTime.getUTCHours(),
188+ minutes: locTime.getUTCMinutes()
189+ }
190+}
191+
192+var Timezones = (function() {
193+ var _apiBase = "http://api.geonames.org/timezoneJSON?username=uweatherdev"
194+ function _callUri(url, onSuccess, onError) {
195+ try {
196+ var xmlHttp = new XMLHttpRequest();
197+ if (xmlHttp) {
198+ console.log("geonames.org: "+url);
199+ xmlHttp.open('GET', url, true);
200+ xmlHttp.onreadystatechange = function () {
201+ try {
202+ if (xmlHttp.readyState == 4) {
203+ if(xmlHttp.status === 200) {
204+ // using rawOffset, ignoring DST
205+ var json = JSON.parse(xmlHttp.responseText),
206+ offset = json.rawOffset*60*60*1000;
207+ onSuccess(offset)
208+ } else {
209+ onError({
210+ msg: "timezones: wrong response http code, got "+xmlHttp.status,
211+ request: request
212+ });
213+ }
214+ }
215+ } catch (e) {
216+ onError({msg: "something bad happened while calling geonames.org"});
217+ }
218+ };
219+ xmlHttp.send(null);
220+ }
221+ } catch (e) {
222+ onError({msg: "cannot call geonames.org"});
223+ }
224+ }
225+ return {
226+ getTzOffset: function(coord, onSuccess, onError) {
227+ var apiUri = _apiBase+"&lat="+coord.lat+"&lng="+coord.lon;
228+ _callUri(apiUri, onSuccess, onError);
229+ }
230+ }
231+})()
232
233 var OpenWeatherMapApi = (function() {
234 /**
235@@ -64,10 +144,10 @@
236 return searchResult;
237 }
238 //
239- function _buildDataPoint(data) {
240+ function _buildDataPoint(date, data) {
241 var result = {
242 timestamp: data.dt,
243- date: Qt.formatDateTime(new Date(data.dt*1000), "yyyy-MM-dd hh:mm"),
244+ date: date,
245 metric: {
246 temp:data.main.temp,
247 windSpeed: calcKmh(data.main.speed),
248@@ -83,6 +163,7 @@
249 humidity: data.main.humidity,
250 pressure: data.main.pressure,
251 windDeg: data.main.deg,
252+ windDir: calcWindDir(data.main.deg),
253 icon: _icon_map[data.weather[0].icon],
254 condition: data.weather[0]
255 };
256@@ -116,26 +197,41 @@
257 icon: _icon_map[data.weather[0].icon],
258 condition: data.weather[0],
259 windDeg: data.deg,
260+ windDir: calcWindDir(data.deg),
261 hourly: []
262 }
263 return result;
264 }
265 //
266- function formatResult(data) {
267+ function formatResult(data, location) {
268 var tmpResult = {},
269 result = [],
270 day=null,
271- today = Qt.formatDateTime(new Date(), "yyyy-MM-dd");
272+ offset=(location.tzinfo && location.tzinfo.offset) ? location.tzinfo.offset: 0,
273+ localNow = getLocationTime(new Date().getTime()+offset),
274+ todayDate;
275+ print("["+location.name+"] "+JSON.stringify(localNow))
276 data["daily"]["list"].forEach(function(dayData) {
277- day = Qt.formatDateTime(new Date(dayData.dt*1000), "yyyy-MM-dd")
278- tmpResult[day] = _buildDayFormat(day, dayData);
279+ var date = getLocationTime(((dayData.dt*1000)-1000)+offset), // minus 1 sec to handle +/-12 TZ
280+ day = date.year+"-"+date.month+"-"+date.date;
281+ if(!todayDate) {
282+ if(localNow.year+"-"+localNow.month+"-"+localNow.date > day) {
283+ // skip "yesterday"
284+ return;
285+ }
286+ todayDate = date;
287+ }
288+ tmpResult[day] = _buildDayFormat(date, dayData);
289 })
290- tmpResult[today]["current"] = _buildDataPoint(data["current"]);
291+ var today = todayDate.year+"-"+todayDate.month+"-"+todayDate.date
292+ tmpResult[today]["current"] = _buildDataPoint(todayDate, data["current"]);
293 if(data["forecast"] !== undefined) {
294 data["forecast"]["list"].forEach(function(hourData) {
295- var date = new Date(hourData.dt*1000)
296- day = Qt.formatDateTime(date, "yyyy-MM-dd");
297- tmpResult[day]["hourly"].push(_buildDataPoint(hourData));
298+ var dateData = getLocationTime((hourData.dt*1000)+offset),
299+ day = dateData.year+"-"+dateData.month+"-"+dateData.date;
300+ if(tmpResult[day]) {
301+ tmpResult[day]["hourly"].push(_buildDataPoint(dateData, hourData));
302+ }
303 })
304 }
305 for(var d in tmpResult) {
306@@ -185,10 +281,9 @@
307 var formattedResult;
308 respData[request.type] = data;
309 if(respData["current"] !== undefined
310- //
311 && respData["forecast"] !== undefined
312 && respData["daily"] !== undefined) {
313- response["data"] = formatResult(respData)
314+ response["data"] = formatResult(respData, params.location)
315 onSuccess(response);
316 }
317 }),
318@@ -199,11 +294,29 @@
319 console.log("retry of "+err.request.url);
320 var retryFunc = handlerMap[err.request.type];
321 apiCaller(retryFunc, addDataToResponse, onErrorHandler);
322- })
323- apiCaller(handlerMap.current, addDataToResponse, retryHandler);
324- //
325- apiCaller(handlerMap.forecast, addDataToResponse, retryHandler);
326- apiCaller(handlerMap.daily, addDataToResponse, retryHandler);
327+ }),
328+ callApi = function() {
329+ apiCaller(handlerMap.current, addDataToResponse, retryHandler);
330+ apiCaller(handlerMap.forecast, addDataToResponse, retryHandler);
331+ apiCaller(handlerMap.daily, addDataToResponse, retryHandler);
332+ }
333+
334+ if(!params.location.tzinfo && params.location.coord) {
335+ // get the timezone offset for the location
336+ var tzSuccess = (function(offset) {
337+ if(offset !== undefined) {
338+ params.location.tzinfo = {offset: parseInt(offset)};
339+ }
340+ callApi()
341+ }),
342+ tzError = (function(err) {
343+ print(JSON.stringify(err));
344+ callApi()
345+ });
346+ Timezones.getTzOffset(params.location.coord, tzSuccess, tzError)
347+ } else {
348+ callApi()
349+ }
350 }
351 }
352
353@@ -217,40 +330,40 @@
354 function _getService(name) {
355 if(_services[name] !== undefined) {
356 return _services[name];
357- }
358+ }
359 return _services["openweathermap"];
360 }
361 //
362- function _sendRequest(request, onSuccess, onError) {
363- var xmlHttp = new XMLHttpRequest();
364- if (xmlHttp) {
365- console.log(request.url);
366- xmlHttp.open('GET', request.url, true);
367- xmlHttp.onreadystatechange = function () {
368- try {
369- if (xmlHttp.readyState == 4) {
370- //console.log(xmlHttp.responseText);
371- var json = JSON.parse(xmlHttp.responseText);
372- if(xmlHttp.status === 200) {
373- onSuccess(request,json);
374- } else {
375- onError({
376- msg: "wrong response http code, got "+xmlHttp.status,
377- request: request
378- });
379- }
380+ function _sendRequest(request, onSuccess, onError) {
381+ var xmlHttp = new XMLHttpRequest();
382+ if (xmlHttp) {
383+ console.log(request.url);
384+ xmlHttp.open('GET', request.url, true);
385+ xmlHttp.onreadystatechange = function () {
386+ try {
387+ if (xmlHttp.readyState == 4) {
388+ //console.log(xmlHttp.responseText);
389+ var json = JSON.parse(xmlHttp.responseText);
390+ if(xmlHttp.status === 200) {
391+ onSuccess(request,json);
392+ } else {
393+ onError({
394+ msg: "wrong response http code, got "+xmlHttp.status,
395+ request: request
396+ });
397 }
398- } catch (e) {
399- onError({msg: "wrong response data format", request: request});
400 }
401- };
402- xmlHttp.send(null);
403- }
404+ } catch (e) {
405+ onError({msg: "wrong response data format", request: request});
406+ }
407+ };
408+ xmlHttp.send(null);
409+ }
410 }
411 //
412 return {
413 //
414- search: function(mode, params, onSuccess, onError) {
415+ search: function(mode, params, onSuccess, onError) {
416 var service = _getService();
417 service.search(mode, params, _sendRequest, onSuccess, onError);
418 },
419@@ -272,7 +385,7 @@
420 if(typeof WorkerScript != "undefined") {
421 WorkerScript.onMessage = function(message) {
422 // handles the response data
423- var finished = function(result) {
424+ var finished = function(result) {
425 WorkerScript.sendMessage({
426 action: message.action,
427 result: result
428@@ -300,8 +413,13 @@
429 if(locLength > 0) {
430 message.params.locations.forEach(function(loc) {
431 var updatedHnd = function (newData, cached) {
432- locUpdated += 1;
433- newData["save"] = (cached === true) ? false : true;
434+ locUpdated += 1;
435+ if(cached === true) {
436+ newData["save"] = false;
437+ } else {
438+ newData["save"] = true;
439+ newData["updated"] = new Date().getTime();
440+ }
441 result.push(newData);
442 if(locUpdated === locLength) {
443 result.sort(sortDataResults);
444
445=== modified file 'tests/autopilot/ubuntu_weather_app/tests/test_settings.py'
446--- tests/autopilot/ubuntu_weather_app/tests/test_settings.py 2013-09-15 18:39:54 +0000
447+++ tests/autopilot/ubuntu_weather_app/tests/test_settings.py 2013-09-20 16:48:49 +0000
448@@ -39,11 +39,11 @@
449 self.assertThat(lambda: self.main_window.get_objects('QQuickText', 'CurrentTempText'), Eventually(Not(Is(None))))
450 current_temps = self.main_window.get_objects('QQuickText', 'CurrentTempText')
451 if units == "imperial":
452- self.assertThat(current_temps[0].text, Eventually(Equals(u'72')))
453- self.assertThat(current_temps[1].text, Eventually(Equals(u'74')))
454+ self.assertThat(current_temps[0].text, Eventually(Equals(u'56')))
455+ self.assertThat(current_temps[1].text, Eventually(Equals(u'60')))
456 else:
457- self.assertThat(current_temps[0].text, Eventually(Equals(u'22')))
458- self.assertThat(current_temps[1].text, Eventually(Equals(u'24')))
459+ self.assertThat(current_temps[0].text, Eventually(Equals(u'13')))
460+ self.assertThat(current_temps[1].text, Eventually(Equals(u'16')))
461
462 def _check_wind_units(self, wind_units):
463 """Checks selected units by values from the first location tab"""
464@@ -54,11 +54,11 @@
465 self.assertThat(lambda: wind_component.get_object('QQuickText', 'WeatherDetailValue'), Eventually(Not(Is(None))))
466 wind_value = wind_component.get_object('QQuickText', 'WeatherDetailValue')
467 if wind_units == "mph":
468- self.assertThat(wind_unit.text, Eventually(Equals(u'mph NW')))
469- self.assertThat(wind_value.text, Eventually(Equals(u'3')))
470+ self.assertThat(wind_unit.text, Eventually(Equals(u'mph W')))
471+ self.assertThat(wind_value.text, Eventually(Equals(u'12')))
472 else:
473- self.assertThat(wind_unit.text, Eventually(Equals(u'km/h NW')))
474- self.assertThat(wind_value.text, Eventually(Equals(u'4')))
475+ self.assertThat(wind_unit.text, Eventually(Equals(u'km/h W')))
476+ self.assertThat(wind_value.text, Eventually(Equals(u'19')))
477
478
479 def test_switch_scale(self):
480@@ -192,11 +192,11 @@
481 # while it's opened, units_selector returns false
482 # self.assertThat(units_selector.expanded, Eventually(Equals(True)))
483
484- # click celsius option
485+ # click kmh option
486 self._move_pointer_around()
487 self.assertThat(lambda: units_selector.select_many('ShapeItem')[1], Eventually(Not(Is(None))))
488- metric_option = units_selector.select_many('ShapeItem')[1]
489- self.pointing_device.click_object(metric_option)
490+ kmh_option = units_selector.select_many('ShapeItem')[1]
491+ self.pointing_device.click_object(kmh_option)
492
493 # confirm
494 self.assertThat(units_selector.selectedIndex, Eventually(Equals(0)))
495@@ -205,5 +205,5 @@
496 # wait for reload and check the metric values again
497 load_indicator = self.main_window.get_object('ActivityIndicator', 'LoadingSpinner')
498 self.assertThat(load_indicator.running, Eventually(Equals(False)))
499- self._check_units('metric')
500+ self._check_wind_units('kmh')
501
502
503=== modified file 'tests/autopilot/ubuntu_weather_app/tests/weatherdata.py'
504--- tests/autopilot/ubuntu_weather_app/tests/weatherdata.py 2013-08-28 18:48:35 +0000
505+++ tests/autopilot/ubuntu_weather_app/tests/weatherdata.py 2013-09-20 16:48:49 +0000
506@@ -6,6 +6,6 @@
507 # by the Free Software Foundation.
508 locations_data = []
509
510-locations_data.append("""{"updated":1377714141824,"save":false,"db":{"updated":"2013-08-28T18:22:21.824Z","id":1},"data":[{"icon":"few_clouds_day","timestamp":1377634835,"hourly":[{"icon":"few_clouds_day","timestamp":1377712800,"pressure":1026.61,"metric":{"temp":22.3,"windSpeed":null},"date":"2013-08-28 20:00","condition":{"icon":"02d","description":"sky is clear","id":800,"main":"Clear"},"humidity":47,"imperial":{"rain":null,"temp":72.14,"windSpeed":null}},{"icon":"few_clouds_night","timestamp":1377723600,"pressure":1027.08,"metric":{"temp":15.13,"windSpeed":null},"date":"2013-08-28 23:00","condition":{"icon":"02n","description":"sky is clear","id":800,"main":"Clear"},"humidity":72,"imperial":{"rain":null,"temp":59.234,"windSpeed":null}}],"windDeg":315,"pressure":1026.61,"current":{"icon":"clear_day","timestamp":1377713524,"pressure":1022,"service_id":2643743,"metric":{"temp":22.3,"windSpeed":null},"date":"2013-08-28 20:12","condition":{"icon":"01d","description":"Sky is Clear","id":800,"main":"Clear"},"humidity":43,"imperial":{"rain":null,"temp":72.14,"windSpeed":null},"service":"openweathermap"},"metric":{"tempMin":11.78,"windSpeed":4.32,"tempMax":22.3},"date":"2013-08-28","condition":{"icon":"02d","description":"sky is clear","id":800,"main":"Clear"},"humidity":47,"imperial":{"rain":null,"tempMin":53.204,"windSpeed":2.688,"tempMax":72.14}},{"icon":"few_clouds_day","timestamp":1377777600,"hourly":[{"icon":"clear_night","timestamp":1377734400,"pressure":1027,"metric":{"temp":11.78,"windSpeed":null},"date":"2013-08-29 02:00","condition":{"icon":"01n","description":"sky is clear","id":800,"main":"Clear"},"humidity":85,"imperial":{"rain":null,"temp":53.204,"windSpeed":null}},{"icon":"scattered_clouds_night","timestamp":1377745200,"pressure":1026.3,"metric":{"temp":10.95,"windSpeed":null},"date":"2013-08-29 05:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":87,"imperial":{"rain":null,"temp":51.71,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377756000,"pressure":1026.82,"metric":{"temp":13.86,"windSpeed":null},"date":"2013-08-29 08:00","condition":{"icon":"04d","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":92,"imperial":{"rain":null,"temp":56.948,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377766800,"pressure":1026.97,"metric":{"temp":20.04,"windSpeed":null},"date":"2013-08-29 11:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":68,"imperial":{"rain":null,"temp":68.072,"windSpeed":null}},{"icon":"few_clouds_day","timestamp":1377777600,"pressure":1026.1,"metric":{"temp":22.94,"windSpeed":null},"date":"2013-08-29 14:00","condition":{"icon":"02d","description":"sky is clear","id":800,"main":"Clear"},"humidity":56,"imperial":{"rain":null,"temp":73.292,"windSpeed":null}},{"icon":"clear_day","timestamp":1377788400,"pressure":1024.91,"metric":{"temp":23.6,"windSpeed":null},"date":"2013-08-29 17:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":52,"imperial":{"rain":null,"temp":74.48,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377799200,"pressure":1024.47,"metric":{"temp":21.96,"windSpeed":null},"date":"2013-08-29 20:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":56,"imperial":{"rain":null,"temp":71.528,"windSpeed":null}},{"icon":"scattered_clouds_night","timestamp":1377810000,"pressure":1025.12,"metric":{"temp":18.95,"windSpeed":null},"date":"2013-08-29 23:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":72,"imperial":{"rain":null,"temp":66.11,"windSpeed":null}}],"windDeg":250,"pressure":1026.1,"metric":{"tempMin":13.86,"windSpeed":11.34,"tempMax":23.6},"date":"2013-08-29","condition":{"icon":"02d","description":"sky is clear","id":800,"main":"Clear"},"humidity":56,"imperial":{"rain":null,"tempMin":56.948,"windSpeed":7.056,"tempMax":74.48}},{"icon":"clear_day","timestamp":1377864000,"hourly":[{"icon":"broken_clouds_night","timestamp":1377820800,"pressure":1024.86,"metric":{"temp":17.52,"windSpeed":null},"date":"2013-08-30 02:00","condition":{"icon":"04n","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":84,"imperial":{"rain":null,"temp":63.536,"windSpeed":null}},{"icon":"few_clouds_night","timestamp":1377831600,"pressure":1024.75,"metric":{"temp":15.94,"windSpeed":null},"date":"2013-08-30 05:00","condition":{"icon":"02n","description":"few clouds","id":801,"main":"Clouds"},"humidity":92,"imperial":{"rain":null,"temp":60.692,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377842400,"pressure":1024.38,"metric":{"temp":14.08,"windSpeed":null},"date":"2013-08-30 08:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":98,"imperial":{"rain":null,"temp":57.344,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377853200,"pressure":1024.66,"metric":{"temp":19.03,"windSpeed":null},"date":"2013-08-30 11:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":71,"imperial":{"rain":null,"temp":66.254,"windSpeed":null}},{"icon":"clear_day","timestamp":1377864000,"pressure":1024.04,"metric":{"temp":21.58,"windSpeed":null},"date":"2013-08-30 14:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":61,"imperial":{"rain":null,"temp":70.844,"windSpeed":null}},{"icon":"clear_day","timestamp":1377874800,"pressure":1023.15,"metric":{"temp":23.16,"windSpeed":null},"date":"2013-08-30 17:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":56,"imperial":{"rain":null,"temp":73.688,"windSpeed":null}},{"icon":"clear_day","timestamp":1377885600,"pressure":1023.18,"metric":{"temp":22.16,"windSpeed":null},"date":"2013-08-30 20:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":57,"imperial":{"rain":null,"temp":71.888,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1377896400,"pressure":1024.55,"metric":{"temp":19.65,"windSpeed":null},"date":"2013-08-30 23:00","condition":{"icon":"04n","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":71,"imperial":{"rain":null,"temp":67.37,"windSpeed":null}}],"windDeg":256,"pressure":1024.04,"metric":{"tempMin":14.08,"windSpeed":8.82,"tempMax":23.16},"date":"2013-08-30","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":61,"imperial":{"rain":null,"tempMin":57.344,"windSpeed":5.488000000000001,"tempMax":73.688}},{"icon":"clear_day","timestamp":1377950400,"hourly":[{"icon":"scattered_clouds_night","timestamp":1377918000,"pressure":1026.39,"metric":{"temp":16.78,"windSpeed":null},"date":"2013-08-31 05:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":73,"imperial":{"rain":null,"temp":62.20400000000001,"windSpeed":null}},{"icon":"clear_day","timestamp":1377928800,"pressure":1027.81,"metric":{"temp":13.42,"windSpeed":null},"date":"2013-08-31 08:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":81,"imperial":{"rain":null,"temp":56.156,"windSpeed":null}},{"icon":"clear_day","timestamp":1377939600,"pressure":1029.01,"metric":{"temp":16.28,"windSpeed":null},"date":"2013-08-31 11:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":64,"imperial":{"rain":null,"temp":61.304,"windSpeed":null}},{"icon":"clear_day","timestamp":1377950400,"pressure":1029,"metric":{"temp":18.34,"windSpeed":null},"date":"2013-08-31 14:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":55,"imperial":{"rain":null,"temp":65.012,"windSpeed":null}},{"icon":"clear_day","timestamp":1377961200,"pressure":1028.6,"metric":{"temp":19.32,"windSpeed":null},"date":"2013-08-31 17:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":49,"imperial":{"rain":null,"temp":66.77600000000001,"windSpeed":null}},{"icon":"clear_day","timestamp":1377972000,"pressure":1029.02,"metric":{"temp":17.88,"windSpeed":null},"date":"2013-08-31 20:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":50,"imperial":{"rain":null,"temp":64.184,"windSpeed":null}},{"icon":"scattered_clouds_night","timestamp":1377982800,"pressure":1030.63,"metric":{"temp":15.39,"windSpeed":null},"date":"2013-08-31 23:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":61,"imperial":{"rain":null,"temp":59.702,"windSpeed":null}}],"windDeg":314,"pressure":1029,"metric":{"tempMin":13.42,"windSpeed":9.9,"tempMax":19.32},"date":"2013-08-31","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":55,"imperial":{"rain":null,"tempMin":56.156,"windSpeed":6.16,"tempMax":66.77600000000001}},{"icon":"clear_day","timestamp":1378036800,"hourly":[{"icon":"scattered_clouds_night","timestamp":1377993600,"pressure":1031.14,"metric":{"temp":13.6,"windSpeed":null},"date":"2013-09-01 02:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":68,"imperial":{"rain":null,"temp":56.480000000000004,"windSpeed":null}},{"icon":"clear_night","timestamp":1378004400,"pressure":1031.39,"metric":{"temp":12.5,"windSpeed":null},"date":"2013-09-01 05:00","condition":{"icon":"01n","description":"sky is clear","id":800,"main":"Clear"},"humidity":75,"imperial":{"rain":null,"temp":54.5,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1378015200,"pressure":1031.64,"metric":{"temp":10.94,"windSpeed":null},"date":"2013-09-01 08:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":79,"imperial":{"rain":null,"temp":51.692,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1378026000,"pressure":1032.45,"metric":{"temp":15.35,"windSpeed":null},"date":"2013-09-01 11:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":59,"imperial":{"rain":null,"temp":59.629999999999995,"windSpeed":null}},{"icon":"clear_day","timestamp":1378036800,"pressure":1031.68,"metric":{"temp":18.63,"windSpeed":null},"date":"2013-09-01 14:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":56,"imperial":{"rain":null,"temp":65.53399999999999,"windSpeed":null}},{"icon":"clear_day","timestamp":1378047600,"pressure":1030.42,"metric":{"temp":20.06,"windSpeed":null},"date":"2013-09-01 17:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":50,"imperial":{"rain":null,"temp":68.108,"windSpeed":null}},{"icon":"few_clouds_day","timestamp":1378058400,"pressure":1029.96,"metric":{"temp":18.82,"windSpeed":null},"date":"2013-09-01 20:00","condition":{"icon":"02d","description":"few clouds","id":801,"main":"Clouds"},"humidity":51,"imperial":{"rain":null,"temp":65.876,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1378069200,"pressure":1030.51,"metric":{"temp":15.97,"windSpeed":null},"date":"2013-09-01 23:00","condition":{"icon":"04n","description":"broken clouds","id":803,"main":"Clouds"},"humidity":61,"imperial":{"rain":null,"temp":60.746,"windSpeed":null}}],"windDeg":303,"pressure":1031.68,"metric":{"tempMin":10.94,"windSpeed":10.836,"tempMax":20.06},"date":"2013-09-01","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":56,"imperial":{"rain":null,"tempMin":51.692,"windSpeed":6.7424,"tempMax":68.108}},{"icon":"rain_day","timestamp":1378119600,"hourly":[{"icon":"scattered_clouds_night","timestamp":1378080000,"pressure":1030.71,"metric":{"temp":13.64,"windSpeed":null},"date":"2013-09-02 02:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":71,"imperial":{"rain":null,"temp":56.55200000000001,"windSpeed":null}}],"windDeg":300,"pressure":1037.92,"metric":{"tempMin":12.18,"windSpeed":14.112,"tempMax":20.77},"date":"2013-09-02","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":null,"tempMin":53.924,"windSpeed":8.780800000000001,"tempMax":69.386}},{"icon":"rain_day","timestamp":1378206000,"hourly":[],"windDeg":289,"pressure":1037.1,"metric":{"rain":0.97,"tempMin":11.18,"windSpeed":13.751999999999999,"tempMax":20.56},"date":"2013-09-03","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.03818897637795276,"tempMin":52.123999999999995,"windSpeed":8.5568,"tempMax":69.008}},{"icon":"rain_day","timestamp":1378292400,"hourly":[],"windDeg":259,"pressure":1036.97,"metric":{"rain":0.65,"tempMin":12.59,"windSpeed":8.784,"tempMax":20.56},"date":"2013-09-04","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.025590551181102365,"tempMin":54.662,"windSpeed":5.4656,"tempMax":69.008}},{"icon":"clear_day","timestamp":1378378800,"hourly":[],"windDeg":269,"pressure":1029.24,"metric":{"tempMin":12.69,"windSpeed":18.936,"tempMax":21.59},"date":"2013-09-05","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":0,"imperial":{"rain":null,"tempMin":54.842,"windSpeed":11.7824,"tempMax":70.862}},{"icon":"clear_day","timestamp":1378465200,"hourly":[],"windDeg":273,"pressure":1024.02,"metric":{"tempMin":10.49,"windSpeed":9.972,"tempMax":20.99},"date":"2013-09-06","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":0,"imperial":{"rain":null,"tempMin":50.882000000000005,"windSpeed":6.2048000000000005,"tempMax":69.782}}],"format":20130827,"location":{"service_id":2643743,"name":"London","country":"GB","service":"openweathermap"}}""")
511+locations_data.append("""{"location":{"coord":{"lon":-0.12574,"lat":51.50853},"service_id":2643743,"name":"London","tzinfo":{"offset":0},"country":"GB","dbId":0,"service":"openweathermap"},"db":{"updated":"2013-09-16T12:13:31.725Z","id":3},"format":20130916,"data":[{"date":{"year":2013,"month":8,"date":15,"hours":10,"minutes":59},"timestamp":1379329200,"metric":{"tempMin":12.25,"tempMax":15.4,"windSpeed":18.576,"rain":0,"snow":0},"imperial":{"tempMin":54.05,"tempMax":59.72,"windSpeed":11.5584,"rain":0,"snow":0},"pressure":1004.86,"humidity":71,"icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"},"windDeg":275,"windDir":"W","hourly":[{"timestamp":1379322000,"date":{"year":2013,"month":8,"date":16,"hours":9,"minutes":0},"metric":{"temp":14.52,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.135999999999996,"windSpeed":null,"rain":0,"snow":0},"humidity":84,"pressure":1005.79,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379332800,"date":{"year":2013,"month":8,"date":16,"hours":12,"minutes":0},"metric":{"temp":15.51,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":59.918,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1004.86,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379343600,"date":{"year":2013,"month":8,"date":16,"hours":15,"minutes":0},"metric":{"temp":15.39,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":59.702,"windSpeed":null,"rain":0,"snow":0},"humidity":67,"pressure":1004.44,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379354400,"date":{"year":2013,"month":8,"date":16,"hours":18,"minutes":0},"metric":{"temp":13.88,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":56.984,"windSpeed":null,"rain":0,"snow":0},"humidity":68,"pressure":1004.55,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379365200,"date":{"year":2013,"month":8,"date":16,"hours":21,"minutes":0},"metric":{"temp":12.8,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.040000000000006,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1005.72,"windDir":"?","icon":"few_clouds_night","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}}],"current":{"timestamp":1379330400,"date":{"year":2013,"month":8,"date":16,"hours":10,"minutes":59},"metric":{"temp":13.23,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.814,"windSpeed":null,"rain":0,"snow":0},"humidity":50,"pressure":1001,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"},"service":"openweathermap","service_id":2643743}},{"date":{"year":2013,"month":8,"date":17,"hours":10,"minutes":59},"timestamp":1379415600,"metric":{"tempMin":11.69,"tempMax":15.62,"windSpeed":18.576,"rain":0,"snow":0},"imperial":{"tempMin":53.042,"tempMax":60.116,"windSpeed":11.5584,"rain":0,"snow":0},"pressure":1002.12,"humidity":70,"icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"},"windDeg":269,"windDir":"W","hourly":[{"timestamp":1379376000,"date":{"year":2013,"month":8,"date":17,"hours":0,"minutes":0},"metric":{"temp":12.34,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":54.212,"windSpeed":null,"rain":0,"snow":0},"humidity":72,"pressure":1005.67,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379386800,"date":{"year":2013,"month":8,"date":17,"hours":3,"minutes":0},"metric":{"temp":11.95,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":53.51,"windSpeed":null,"rain":0,"snow":0},"humidity":72,"pressure":1005.35,"windDir":"?","icon":"few_clouds_night","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}},{"timestamp":1379408400,"date":{"year":2013,"month":8,"date":17,"hours":9,"minutes":0},"metric":{"temp":14.28,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":57.704,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1003.83,"windDir":"?","icon":"few_clouds_day","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}},{"timestamp":1379419200,"date":{"year":2013,"month":8,"date":17,"hours":12,"minutes":0},"metric":{"temp":15.7,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":60.26,"windSpeed":null,"rain":0,"snow":0},"humidity":70,"pressure":1002.12,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379430000,"date":{"year":2013,"month":8,"date":17,"hours":15,"minutes":0},"metric":{"temp":15.38,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":59.684,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1001.27,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379440800,"date":{"year":2013,"month":8,"date":17,"hours":18,"minutes":0},"metric":{"temp":14.09,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":57.362,"windSpeed":null,"rain":0,"snow":0},"humidity":70,"pressure":1001.97,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379451600,"date":{"year":2013,"month":8,"date":17,"hours":21,"minutes":0},"metric":{"temp":13.06,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.508,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1003.36,"windDir":"?","icon":"scattered_clouds_night","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}}]},{"date":{"year":2013,"month":8,"date":18,"hours":10,"minutes":59},"timestamp":1379502000,"metric":{"tempMin":7.06,"tempMax":16.27,"windSpeed":10.296,"rain":0,"snow":0},"imperial":{"tempMin":44.708,"tempMax":61.286,"windSpeed":6.4064000000000005,"rain":0,"snow":0},"pressure":1006.65,"humidity":73,"icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"},"windDeg":323,"windDir":"NW","hourly":[{"timestamp":1379462400,"date":{"year":2013,"month":8,"date":18,"hours":0,"minutes":0},"metric":{"temp":11.74,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":53.132000000000005,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1003.92,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379473200,"date":{"year":2013,"month":8,"date":18,"hours":3,"minutes":0},"metric":{"temp":10.64,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":51.152,"windSpeed":null,"rain":0,"snow":0},"humidity":76,"pressure":1004.29,"windDir":"?","icon":"few_clouds_night","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}},{"timestamp":1379484000,"date":{"year":2013,"month":8,"date":18,"hours":6,"minutes":0},"metric":{"temp":9.12,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":48.416,"windSpeed":null,"rain":0,"snow":0},"humidity":81,"pressure":1004.5,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379494800,"date":{"year":2013,"month":8,"date":18,"hours":9,"minutes":0},"metric":{"temp":13.02,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.436,"windSpeed":null,"rain":0,"snow":0},"humidity":75,"pressure":1005.46,"windDir":"?","icon":"few_clouds_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02d"}},{"timestamp":1379505600,"date":{"year":2013,"month":8,"date":18,"hours":12,"minutes":0},"metric":{"temp":15.71,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":60.278000000000006,"windSpeed":null,"rain":0,"snow":0},"humidity":73,"pressure":1006.65,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379516400,"date":{"year":2013,"month":8,"date":18,"hours":15,"minutes":0},"metric":{"temp":16.29,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":61.322,"windSpeed":null,"rain":0,"snow":0},"humidity":69,"pressure":1007.53,"windDir":"?","icon":"few_clouds_day","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}},{"timestamp":1379527200,"date":{"year":2013,"month":8,"date":18,"hours":18,"minutes":0},"metric":{"temp":13.96,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":57.128,"windSpeed":null,"rain":0,"snow":0},"humidity":72,"pressure":1009.26,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379538000,"date":{"year":2013,"month":8,"date":18,"hours":21,"minutes":0},"metric":{"temp":10.41,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":50.738,"windSpeed":null,"rain":0,"snow":0},"humidity":90,"pressure":1011.39,"windDir":"?","icon":"few_clouds_night","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}}]},{"date":{"year":2013,"month":8,"date":19,"hours":10,"minutes":59},"timestamp":1379588400,"metric":{"tempMin":5.17,"tempMax":16.58,"windSpeed":5.760000000000001,"rain":0,"snow":0},"imperial":{"tempMin":41.306,"tempMax":61.843999999999994,"windSpeed":3.5840000000000005,"rain":0,"snow":0},"pressure":1017.26,"humidity":75,"icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"},"windDeg":284,"windDir":"W","hourly":[{"timestamp":1379548800,"date":{"year":2013,"month":8,"date":19,"hours":0,"minutes":0},"metric":{"temp":7.06,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":44.708,"windSpeed":null,"rain":0,"snow":0},"humidity":91,"pressure":1012.74,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379559600,"date":{"year":2013,"month":8,"date":19,"hours":3,"minutes":0},"metric":{"temp":5.69,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":42.242000000000004,"windSpeed":null,"rain":0,"snow":0},"humidity":90,"pressure":1013.77,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379570400,"date":{"year":2013,"month":8,"date":19,"hours":6,"minutes":0},"metric":{"temp":5.17,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":41.306,"windSpeed":null,"rain":0,"snow":0},"humidity":88,"pressure":1015.32,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379581200,"date":{"year":2013,"month":8,"date":19,"hours":9,"minutes":0},"metric":{"temp":12.6,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":54.68,"windSpeed":null,"rain":0,"snow":0},"humidity":81,"pressure":1016.66,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379592000,"date":{"year":2013,"month":8,"date":19,"hours":12,"minutes":0},"metric":{"temp":16.1,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":60.980000000000004,"windSpeed":null,"rain":0,"snow":0},"humidity":75,"pressure":1017.26,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379602800,"date":{"year":2013,"month":8,"date":19,"hours":15,"minutes":0},"metric":{"temp":16.58,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":61.843999999999994,"windSpeed":null,"rain":0,"snow":0},"humidity":71,"pressure":1017.48,"windDir":"?","icon":"few_clouds_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02d"}},{"timestamp":1379613600,"date":{"year":2013,"month":8,"date":19,"hours":18,"minutes":0},"metric":{"temp":13.31,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.958,"windSpeed":null,"rain":0,"snow":0},"humidity":76,"pressure":1018.1,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379624400,"date":{"year":2013,"month":8,"date":19,"hours":21,"minutes":0},"metric":{"temp":8.23,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":46.814,"windSpeed":null,"rain":0,"snow":0},"humidity":89,"pressure":1019.2,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}}]},{"date":{"year":2013,"month":8,"date":20,"hours":10,"minutes":59},"timestamp":1379674800,"metric":{"tempMin":4.94,"tempMax":14.7,"windSpeed":5.6160000000000005,"rain":0,"snow":0},"imperial":{"tempMin":40.892,"tempMax":58.46,"windSpeed":3.4944000000000006,"rain":0,"snow":0},"pressure":1020.42,"humidity":79,"icon":"few_clouds_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02d"},"windDeg":152,"windDir":"S","hourly":[{"timestamp":1379635200,"date":{"year":2013,"month":8,"date":20,"hours":0,"minutes":0},"metric":{"temp":6.46,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":43.628,"windSpeed":null,"rain":0,"snow":0},"humidity":86,"pressure":1019.53,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379646000,"date":{"year":2013,"month":8,"date":20,"hours":3,"minutes":0},"metric":{"temp":5.42,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":41.756,"windSpeed":null,"rain":0,"snow":0},"humidity":87,"pressure":1019.78,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379656800,"date":{"year":2013,"month":8,"date":20,"hours":6,"minutes":0},"metric":{"temp":4.94,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":40.892,"windSpeed":null,"rain":0,"snow":0},"humidity":86,"pressure":1019.95,"windDir":"?","icon":"few_clouds_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02d"}},{"timestamp":1379667600,"date":{"year":2013,"month":8,"date":20,"hours":9,"minutes":0},"metric":{"temp":14.7,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.46,"windSpeed":null,"rain":0,"snow":0},"humidity":79,"pressure":1020.42,"windDir":"?","icon":"few_clouds_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02d"}},{"timestamp":1379710800,"date":{"year":2013,"month":8,"date":20,"hours":21,"minutes":0},"metric":{"temp":11.97,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":53.54600000000001,"windSpeed":null,"rain":0,"snow":0},"humidity":94,"pressure":1022.65,"windDir":"?","icon":"few_clouds_night","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}}]},{"date":{"year":2013,"month":8,"date":21,"hours":10,"minutes":59},"timestamp":1379761200,"metric":{"tempMin":6.38,"tempMax":16,"windSpeed":19.116,"rain":0,"snow":0},"imperial":{"tempMin":43.484,"tempMax":60.8,"windSpeed":11.894400000000001,"rain":0,"snow":0},"pressure":1029.36,"humidity":0,"icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"},"windDeg":331,"windDir":"N","hourly":[{"timestamp":1379721600,"date":{"year":2013,"month":8,"date":21,"hours":0,"minutes":0},"metric":{"temp":8.76,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":47.768,"windSpeed":null,"rain":0,"snow":0},"humidity":89,"pressure":1024.1,"windDir":"?","icon":"few_clouds_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02n"}}]},{"date":{"year":2013,"month":8,"date":22,"hours":10,"minutes":59},"timestamp":1379847600,"metric":{"tempMin":5.66,"tempMax":16.89,"windSpeed":12.708,"rain":0.74,"snow":0},"imperial":{"tempMin":42.188,"tempMax":62.402,"windSpeed":7.9072000000000005,"rain":0.029133858267716535,"snow":0},"pressure":1030.97,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":221,"windDir":"SW","hourly":[]},{"date":{"year":2013,"month":8,"date":23,"hours":10,"minutes":59},"timestamp":1379934000,"metric":{"tempMin":7.39,"tempMax":18.19,"windSpeed":15.768,"rain":0,"snow":0},"imperial":{"tempMin":45.302,"tempMax":64.742,"windSpeed":9.811200000000001,"rain":0,"snow":0},"pressure":1023.65,"humidity":0,"icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"},"windDeg":197,"windDir":"S","hourly":[]},{"date":{"year":2013,"month":8,"date":24,"hours":10,"minutes":59},"timestamp":1380020400,"metric":{"tempMin":8.38,"tempMax":15.51,"windSpeed":10.8,"rain":0.83,"snow":0},"imperial":{"tempMin":47.084,"tempMax":59.918,"windSpeed":6.720000000000001,"rain":0.03267716535433071,"snow":0},"pressure":1020.61,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":243,"windDir":"W","hourly":[]},{"date":{"year":2013,"month":8,"date":25,"hours":10,"minutes":59},"timestamp":1380106800,"metric":{"tempMin":5.66,"tempMax":16.71,"windSpeed":11.988000000000001,"rain":1.64,"snow":0},"imperial":{"tempMin":42.188,"tempMax":62.078,"windSpeed":7.459200000000001,"rain":0.06456692913385827,"snow":0},"pressure":1030.57,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":190,"windDir":"S","hourly":[]}],"save":true}""")
512
513-locations_data.append("""{"updated":1377714141863,"save":false,"db":{"updated":"2013-08-28T18:22:21.863Z","id":2},"data":[{"icon":"broken_clouds_day","timestamp":1377634835,"hourly":[{"icon":"broken_clouds_day","timestamp":1377702000,"pressure":1028.58,"metric":{"temp":21.6,"windSpeed":null},"date":"2013-08-28 17:00","condition":{"icon":"04d","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":54,"imperial":{"rain":null,"temp":70.88,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377712800,"pressure":1028.72,"metric":{"temp":20.52,"windSpeed":null},"date":"2013-08-28 20:00","condition":{"icon":"04d","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":53,"imperial":{"rain":null,"temp":68.936,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1377723600,"pressure":1030,"metric":{"temp":18.83,"windSpeed":null},"date":"2013-08-28 23:00","condition":{"icon":"04n","description":"broken clouds","id":803,"main":"Clouds"},"humidity":59,"imperial":{"rain":null,"temp":65.894,"windSpeed":null}}],"windDeg":344,"pressure":1028.58,"current":{"icon":"few_clouds_day","timestamp":1377712211,"pressure":1019,"service_id":2911298,"metric":{"temp":21.6,"windSpeed":null},"date":"2013-08-28 19:50","condition":{"icon":"02d","description":"few clouds","id":801,"main":"Clouds"},"humidity":52,"imperial":{"rain":null,"temp":70.88,"windSpeed":null},"service":"openweathermap"},"metric":{"tempMin":14.16,"windSpeed":10.116,"tempMax":21.6},"date":"2013-08-28","condition":{"icon":"04d","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":54,"imperial":{"rain":null,"tempMin":57.488,"windSpeed":6.2944,"tempMax":70.88}},{"icon":"broken_clouds_day","timestamp":1377774000,"hourly":[{"icon":"clear_night","timestamp":1377734400,"pressure":1030.57,"metric":{"temp":14.16,"windSpeed":null},"date":"2013-08-29 02:00","condition":{"icon":"01n","description":"sky is clear","id":800,"main":"Clear"},"humidity":80,"imperial":{"rain":null,"temp":57.488,"windSpeed":null}},{"icon":"few_clouds_night","timestamp":1377745200,"pressure":1030.6,"metric":{"temp":10.76,"windSpeed":null},"date":"2013-08-29 05:00","condition":{"icon":"02n","description":"few clouds","id":801,"main":"Clouds"},"humidity":92,"imperial":{"rain":null,"temp":51.367999999999995,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377756000,"pressure":1031.36,"metric":{"temp":12.75,"windSpeed":null},"date":"2013-08-29 08:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":89,"imperial":{"rain":null,"temp":54.95,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377766800,"pressure":1031.75,"metric":{"temp":18.16,"windSpeed":null},"date":"2013-08-29 11:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":72,"imperial":{"rain":null,"temp":64.688,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377777600,"pressure":1031.04,"metric":{"temp":20.39,"windSpeed":null},"date":"2013-08-29 14:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":64,"imperial":{"rain":null,"temp":68.702,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377788400,"pressure":1030.1,"metric":{"temp":20.98,"windSpeed":null},"date":"2013-08-29 17:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":54,"imperial":{"rain":null,"temp":69.76400000000001,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377799200,"pressure":1029.82,"metric":{"temp":18.87,"windSpeed":null},"date":"2013-08-29 20:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":54,"imperial":{"rain":null,"temp":65.96600000000001,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1377810000,"pressure":1029.82,"metric":{"temp":14.94,"windSpeed":null},"date":"2013-08-29 23:00","condition":{"icon":"04n","description":"broken clouds","id":803,"main":"Clouds"},"humidity":78,"imperial":{"rain":null,"temp":58.891999999999996,"windSpeed":null}}],"windDeg":270,"pressure":1031.04,"metric":{"tempMin":12.75,"windSpeed":11.700000000000001,"tempMax":20.98},"date":"2013-08-29","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":64,"imperial":{"rain":null,"tempMin":54.95,"windSpeed":7.280000000000001,"tempMax":69.76400000000001}},{"icon":"few_clouds_day","timestamp":1377860400,"hourly":[{"icon":"broken_clouds_night","timestamp":1377820800,"pressure":1029.32,"metric":{"temp":14.44,"windSpeed":null},"date":"2013-08-30 02:00","condition":{"icon":"04n","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":79,"imperial":{"rain":null,"temp":57.992000000000004,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1377831600,"pressure":1028.97,"metric":{"temp":14.65,"windSpeed":null},"date":"2013-08-30 05:00","condition":{"icon":"04n","description":"broken clouds","id":803,"main":"Clouds"},"humidity":75,"imperial":{"rain":null,"temp":58.370000000000005,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377842400,"pressure":1028.83,"metric":{"temp":15.36,"windSpeed":null},"date":"2013-08-30 08:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":75,"imperial":{"rain":null,"temp":59.647999999999996,"windSpeed":null}},{"icon":"clear_day","timestamp":1377853200,"pressure":1028.47,"metric":{"temp":20.99,"windSpeed":null},"date":"2013-08-30 11:00","condition":{"icon":"01d","description":"sky is clear","id":800,"main":"Clear"},"humidity":64,"imperial":{"rain":null,"temp":69.782,"windSpeed":null}},{"icon":"few_clouds_day","timestamp":1377864000,"pressure":1027.36,"metric":{"temp":23.17,"windSpeed":null},"date":"2013-08-30 14:00","condition":{"icon":"02d","description":"few clouds","id":801,"main":"Clouds"},"humidity":53,"imperial":{"rain":null,"temp":73.706,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377874800,"pressure":1026.31,"metric":{"temp":23.28,"windSpeed":null},"date":"2013-08-30 17:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":49,"imperial":{"rain":null,"temp":73.904,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377885600,"pressure":1026.26,"metric":{"temp":20.72,"windSpeed":null},"date":"2013-08-30 20:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":54,"imperial":{"rain":null,"temp":69.29599999999999,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1377896400,"pressure":1026.82,"metric":{"temp":17.14,"windSpeed":null},"date":"2013-08-30 23:00","condition":{"icon":"04n","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":90,"imperial":{"rain":null,"temp":62.852000000000004,"windSpeed":null}}],"windDeg":245,"pressure":1027.36,"metric":{"tempMin":15.36,"windSpeed":19.98,"tempMax":23.28},"date":"2013-08-30","condition":{"icon":"02d","description":"few clouds","id":801,"main":"Clouds"},"humidity":53,"imperial":{"rain":null,"tempMin":59.647999999999996,"windSpeed":12.432,"tempMax":73.904}},{"icon":"rain_day","timestamp":1377946800,"hourly":[{"icon":"rain_night","timestamp":1377918000,"pressure":1025.99,"metric":{"temp":14.89,"windSpeed":null},"date":"2013-08-31 05:00","condition":{"icon":"10n","description":"light rain","id":500,"main":"Rain"},"humidity":96,"imperial":{"rain":null,"temp":58.80200000000001,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377928800,"pressure":1025.86,"metric":{"temp":15.17,"windSpeed":null},"date":"2013-08-31 08:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":94,"imperial":{"rain":null,"temp":59.306,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1377939600,"pressure":1025.68,"metric":{"temp":18.18,"windSpeed":null},"date":"2013-08-31 11:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":85,"imperial":{"rain":null,"temp":64.724,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377950400,"pressure":1025.92,"metric":{"temp":18.59,"windSpeed":null},"date":"2013-08-31 14:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":84,"imperial":{"rain":null,"temp":65.462,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1377961200,"pressure":1026.25,"metric":{"temp":20.07,"windSpeed":null},"date":"2013-08-31 17:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":64,"imperial":{"rain":null,"temp":68.126,"windSpeed":null}},{"icon":"rain_day","timestamp":1377972000,"pressure":1027.56,"metric":{"temp":16.63,"windSpeed":null},"date":"2013-08-31 20:00","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":67,"imperial":{"rain":null,"temp":61.934,"windSpeed":null}},{"icon":"clear_night","timestamp":1377982800,"pressure":1028.84,"metric":{"temp":14.09,"windSpeed":null},"date":"2013-08-31 23:00","condition":{"icon":"01n","description":"sky is clear","id":800,"main":"Clear"},"humidity":76,"imperial":{"rain":null,"temp":57.362,"windSpeed":null}}],"windDeg":296,"pressure":1025.92,"metric":{"rain":1,"tempMin":12.8,"windSpeed":19.44,"tempMax":20.07},"date":"2013-08-31","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":84,"imperial":{"rain":0.03937007874015748,"tempMin":55.040000000000006,"windSpeed":12.096000000000002,"tempMax":68.126}},{"icon":"broken_clouds_day","timestamp":1378033200,"hourly":[{"icon":"scattered_clouds_night","timestamp":1377993600,"pressure":1028.87,"metric":{"temp":12.8,"windSpeed":null},"date":"2013-09-01 02:00","condition":{"icon":"03n","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":90,"imperial":{"rain":null,"temp":55.040000000000006,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1378004400,"pressure":1028.71,"metric":{"temp":13.3,"windSpeed":null},"date":"2013-09-01 05:00","condition":{"icon":"04n","description":"broken clouds","id":803,"main":"Clouds"},"humidity":88,"imperial":{"rain":null,"temp":55.94,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1378015200,"pressure":1028.88,"metric":{"temp":14.04,"windSpeed":null},"date":"2013-09-01 08:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":84,"imperial":{"rain":null,"temp":57.272,"windSpeed":null}},{"icon":"scattered_clouds_day","timestamp":1378026000,"pressure":1028.97,"metric":{"temp":16.8,"windSpeed":null},"date":"2013-09-01 11:00","condition":{"icon":"03d","description":"scattered clouds","id":802,"main":"Clouds"},"humidity":75,"imperial":{"rain":null,"temp":62.24,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1378036800,"pressure":1028.6,"metric":{"temp":17.13,"windSpeed":null},"date":"2013-09-01 14:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":69,"imperial":{"rain":null,"temp":62.834,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1378047600,"pressure":1028.15,"metric":{"temp":17.31,"windSpeed":null},"date":"2013-09-01 17:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":60,"imperial":{"rain":null,"temp":63.158,"windSpeed":null}},{"icon":"broken_clouds_day","timestamp":1378058400,"pressure":1027.93,"metric":{"temp":15.67,"windSpeed":null},"date":"2013-09-01 20:00","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":70,"imperial":{"rain":null,"temp":60.206,"windSpeed":null}},{"icon":"broken_clouds_night","timestamp":1378069200,"pressure":1027.99,"metric":{"temp":15.32,"windSpeed":null},"date":"2013-09-01 23:00","condition":{"icon":"04n","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":71,"imperial":{"rain":null,"temp":59.576,"windSpeed":null}}],"windDeg":282,"pressure":1028.6,"metric":{"tempMin":14.04,"windSpeed":20.556,"tempMax":17.31},"date":"2013-09-01","condition":{"icon":"04d","description":"broken clouds","id":803,"main":"Clouds"},"humidity":69,"imperial":{"rain":null,"tempMin":57.272,"windSpeed":12.790400000000002,"tempMax":63.158}},{"icon":"rain_day","timestamp":1378119600,"hourly":[{"icon":"broken_clouds_night","timestamp":1378080000,"pressure":1027.3,"metric":{"temp":14.84,"windSpeed":null},"date":"2013-09-02 02:00","condition":{"icon":"04n","description":"overcast clouds","id":804,"main":"Clouds"},"humidity":78,"imperial":{"rain":null,"temp":58.712,"windSpeed":null}}],"windDeg":323,"pressure":1036.5,"metric":{"rain":0.76,"tempMin":8.87,"windSpeed":7.668,"tempMax":18.48},"date":"2013-09-02","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.029921259842519688,"tempMin":47.966,"windSpeed":4.7712,"tempMax":65.26400000000001}},{"icon":"rain_day","timestamp":1378206000,"hourly":[],"windDeg":229,"pressure":1038.72,"metric":{"rain":2.14,"tempMin":10.38,"windSpeed":11.016,"tempMax":19.79},"date":"2013-09-03","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.08425196850393701,"tempMin":50.684,"windSpeed":6.854400000000001,"tempMax":67.622}},{"icon":"rain_day","timestamp":1378292400,"hourly":[],"windDeg":301,"pressure":1035.96,"metric":{"rain":1.76,"tempMin":13.16,"windSpeed":20.772,"tempMax":18.82},"date":"2013-09-04","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.06929133858267716,"tempMin":55.688,"windSpeed":12.9248,"tempMax":65.876}},{"icon":"rain_day","timestamp":1378378800,"hourly":[],"windDeg":255,"pressure":1028.02,"metric":{"rain":0.78,"tempMin":14.24,"windSpeed":33.156000000000006,"tempMax":19.07},"date":"2013-09-05","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.030708661417322838,"tempMin":57.632000000000005,"windSpeed":20.630400000000005,"tempMax":66.326}},{"icon":"rain_day","timestamp":1378465200,"hourly":[],"windDeg":271,"pressure":1023.01,"metric":{"rain":0.69,"tempMin":15.27,"windSpeed":34.596,"tempMax":20.63},"date":"2013-09-06","condition":{"icon":"10d","description":"light rain","id":500,"main":"Rain"},"humidity":0,"imperial":{"rain":0.02716535433070866,"tempMin":59.486000000000004,"windSpeed":21.526400000000002,"tempMax":69.134}}],"format":20130827,"location":{"coord":{"lon":10,"lat":53.549999},"service_id":2911298,"name":"Hamburg","country":"DE","dbId":0,"service":"openweathermap"}}""")
514+locations_data.append("""{"location":{"coord":{"lon":10,"lat":53.549999},"service_id":2911298,"name":"Hamburg","tzinfo":{"offset":3600000},"country":"DE","dbId":0,"service":"openweathermap"},"db":{"updated":"2013-09-16T12:11:40.768Z","id":2},"format":20130916,"data":[{"date":{"year":2013,"month":8,"date":15,"hours":11,"minutes":59},"timestamp":1379329200,"metric":{"tempMin":8.8,"tempMax":16.04,"windSpeed":25.236,"rain":0,"snow":0},"imperial":{"tempMin":47.84,"tempMax":60.872,"windSpeed":15.7024,"rain":0,"snow":0},"pressure":1005.83,"humidity":87,"icon":"few_clouds_day","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"},"windDeg":239,"windDir":"SW","hourly":[{"timestamp":1379322000,"date":{"year":2013,"month":8,"date":16,"hours":10,"minutes":0},"metric":{"temp":13.5,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":56.3,"windSpeed":null,"rain":0,"snow":0},"humidity":96,"pressure":1006.12,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379332800,"date":{"year":2013,"month":8,"date":16,"hours":13,"minutes":0},"metric":{"temp":14.61,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.298,"windSpeed":null,"rain":0,"snow":0},"humidity":87,"pressure":1005.83,"windDir":"?","icon":"few_clouds_day","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}},{"timestamp":1379343600,"date":{"year":2013,"month":8,"date":16,"hours":16,"minutes":0},"metric":{"temp":13.91,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":57.038,"windSpeed":null,"rain":0,"snow":0},"humidity":79,"pressure":1005.73,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379354400,"date":{"year":2013,"month":8,"date":16,"hours":19,"minutes":0},"metric":{"temp":11.32,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":52.376000000000005,"windSpeed":null,"rain":0,"snow":0},"humidity":78,"pressure":1005.68,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379365200,"date":{"year":2013,"month":8,"date":16,"hours":22,"minutes":0},"metric":{"temp":8.36,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":47.048,"windSpeed":null,"rain":0,"snow":0},"humidity":88,"pressure":1005.96,"windDir":"?","icon":"few_clouds_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02n"}}],"current":{"timestamp":1379330400,"date":{"year":2013,"month":8,"date":16,"hours":11,"minutes":59},"metric":{"temp":15,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":59,"windSpeed":null,"rain":0,"snow":0},"humidity":54,"pressure":997,"windDir":"?","icon":"few_clouds_day","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"},"service":"openweathermap","service_id":2911298}},{"date":{"year":2013,"month":8,"date":17,"hours":11,"minutes":59},"timestamp":1379415600,"metric":{"tempMin":8.11,"tempMax":13.84,"windSpeed":30.636,"rain":2,"snow":0},"imperial":{"tempMin":46.598,"tempMax":56.912,"windSpeed":19.0624,"rain":0.07874015748031496,"snow":0},"pressure":1004.39,"humidity":85,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":230,"windDir":"SW","hourly":[{"timestamp":1379376000,"date":{"year":2013,"month":8,"date":17,"hours":1,"minutes":0},"metric":{"temp":7.67,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":45.806,"windSpeed":null,"rain":0,"snow":0},"humidity":91,"pressure":1005.67,"windDir":"?","icon":"few_clouds_night","condition":{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}},{"timestamp":1379386800,"date":{"year":2013,"month":8,"date":17,"hours":4,"minutes":0},"metric":{"temp":7.06,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":44.708,"windSpeed":null,"rain":0,"snow":0},"humidity":93,"pressure":1004.86,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}},{"timestamp":1379408400,"date":{"year":2013,"month":8,"date":17,"hours":10,"minutes":0},"metric":{"temp":11.26,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":52.268,"windSpeed":null,"rain":0,"snow":0},"humidity":90,"pressure":1004.8,"windDir":"?","icon":"scattered_clouds_day","condition":{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}},{"timestamp":1379419200,"date":{"year":2013,"month":8,"date":17,"hours":13,"minutes":0},"metric":{"temp":12.94,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.292,"windSpeed":null,"rain":0,"snow":0},"humidity":85,"pressure":1004.39,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379430000,"date":{"year":2013,"month":8,"date":17,"hours":16,"minutes":0},"metric":{"temp":12.3,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":54.14,"windSpeed":null,"rain":0,"snow":0},"humidity":80,"pressure":1004.11,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379440800,"date":{"year":2013,"month":8,"date":17,"hours":19,"minutes":0},"metric":{"temp":11.63,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":52.934,"windSpeed":null,"rain":0,"snow":0},"humidity":77,"pressure":1003.51,"windDir":"?","icon":"broken_clouds_night","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}},{"timestamp":1379451600,"date":{"year":2013,"month":8,"date":17,"hours":22,"minutes":0},"metric":{"temp":11.12,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":52.016,"windSpeed":null,"rain":0,"snow":0},"humidity":79,"pressure":1002.22,"windDir":"?","icon":"broken_clouds_night","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}}]},{"date":{"year":2013,"month":8,"date":18,"hours":11,"minutes":59},"timestamp":1379502000,"metric":{"tempMin":9.41,"tempMax":13.28,"windSpeed":18.036,"rain":2,"snow":0},"imperial":{"tempMin":48.938,"tempMax":55.903999999999996,"windSpeed":11.2224,"rain":0.07874015748031496,"snow":0},"pressure":999.43,"humidity":97,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":204,"windDir":"S","hourly":[{"timestamp":1379462400,"date":{"year":2013,"month":8,"date":18,"hours":1,"minutes":0},"metric":{"temp":9.87,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":49.766,"windSpeed":null,"rain":0,"snow":0},"humidity":98,"pressure":1000.84,"windDir":"?","icon":"rain_night","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10n"}},{"timestamp":1379473200,"date":{"year":2013,"month":8,"date":18,"hours":4,"minutes":0},"metric":{"temp":9.85,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":49.730000000000004,"windSpeed":null,"rain":0,"snow":0},"humidity":98,"pressure":999.91,"windDir":"?","icon":"broken_clouds_night","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}},{"timestamp":1379484000,"date":{"year":2013,"month":8,"date":18,"hours":7,"minutes":0},"metric":{"temp":10,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":50,"windSpeed":null,"rain":0,"snow":0},"humidity":100,"pressure":999.56,"windDir":"?","icon":"broken_clouds_day","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}},{"timestamp":1379494800,"date":{"year":2013,"month":8,"date":18,"hours":10,"minutes":0},"metric":{"temp":11.26,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":52.268,"windSpeed":null,"rain":0,"snow":0},"humidity":99,"pressure":999.55,"windDir":"?","icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"}},{"timestamp":1379505600,"date":{"year":2013,"month":8,"date":18,"hours":13,"minutes":0},"metric":{"temp":12.98,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.364000000000004,"windSpeed":null,"rain":0,"snow":0},"humidity":97,"pressure":999.43,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379516400,"date":{"year":2013,"month":8,"date":18,"hours":16,"minutes":0},"metric":{"temp":13.03,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":55.454,"windSpeed":null,"rain":0,"snow":0},"humidity":95,"pressure":999.91,"windDir":"?","icon":"broken_clouds_day","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}},{"timestamp":1379527200,"date":{"year":2013,"month":8,"date":18,"hours":19,"minutes":0},"metric":{"temp":12.07,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":53.726,"windSpeed":null,"rain":0,"snow":0},"humidity":92,"pressure":1002.29,"windDir":"?","icon":"broken_clouds_night","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}},{"timestamp":1379538000,"date":{"year":2013,"month":8,"date":18,"hours":22,"minutes":0},"metric":{"temp":10.04,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":50.072,"windSpeed":null,"rain":0,"snow":0},"humidity":94,"pressure":1004.67,"windDir":"?","icon":"clear_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01n"}}]},{"date":{"year":2013,"month":8,"date":19,"hours":11,"minutes":59},"timestamp":1379588400,"metric":{"tempMin":9.02,"tempMax":15.9,"windSpeed":25.02,"rain":12,"snow":0},"imperial":{"tempMin":48.236000000000004,"tempMax":60.620000000000005,"windSpeed":15.568000000000001,"rain":0.4724409448818898,"snow":0},"pressure":1012.07,"humidity":83,"icon":"rain_day","condition":{"id":501,"main":"Rain","description":"moderate rain","icon":"10d"},"windDeg":278,"windDir":"W","hourly":[{"timestamp":1379548800,"date":{"year":2013,"month":8,"date":19,"hours":1,"minutes":0},"metric":{"temp":9.41,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":48.938,"windSpeed":null,"rain":0,"snow":0},"humidity":96,"pressure":1007.14,"windDir":"?","icon":"broken_clouds_night","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}},{"timestamp":1379559600,"date":{"year":2013,"month":8,"date":19,"hours":4,"minutes":0},"metric":{"temp":10.64,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":51.152,"windSpeed":null,"rain":0,"snow":0},"humidity":97,"pressure":1009.07,"windDir":"?","icon":"broken_clouds_night","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}},{"timestamp":1379570400,"date":{"year":2013,"month":8,"date":19,"hours":7,"minutes":0},"metric":{"temp":9.02,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":48.236000000000004,"windSpeed":null,"rain":0,"snow":0},"humidity":94,"pressure":1010.69,"windDir":"?","icon":"clear_day","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"01d"}},{"timestamp":1379581200,"date":{"year":2013,"month":8,"date":19,"hours":10,"minutes":0},"metric":{"temp":13.45,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":56.21,"windSpeed":null,"rain":0,"snow":0},"humidity":99,"pressure":1011.97,"windDir":"?","icon":"broken_clouds_day","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}},{"timestamp":1379592000,"date":{"year":2013,"month":8,"date":19,"hours":13,"minutes":0},"metric":{"temp":15.9,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":60.620000000000005,"windSpeed":null,"rain":0,"snow":0},"humidity":83,"pressure":1012.07,"windDir":"?","icon":"broken_clouds_day","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}},{"timestamp":1379602800,"date":{"year":2013,"month":8,"date":19,"hours":16,"minutes":0},"metric":{"temp":13.38,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":56.084,"windSpeed":null,"rain":0,"snow":0},"humidity":88,"pressure":1012.53,"windDir":"?","icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"}},{"timestamp":1379613600,"date":{"year":2013,"month":8,"date":19,"hours":19,"minutes":0},"metric":{"temp":12.71,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":54.878,"windSpeed":null,"rain":0,"snow":0},"humidity":96,"pressure":1011.05,"windDir":"?","icon":"rain_night","condition":{"id":501,"main":"Rain","description":"moderate rain","icon":"10n"}},{"timestamp":1379624400,"date":{"year":2013,"month":8,"date":19,"hours":22,"minutes":0},"metric":{"temp":14.98,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.964,"windSpeed":null,"rain":0,"snow":0},"humidity":97,"pressure":1011.74,"windDir":"?","icon":"rain_night","condition":{"id":501,"main":"Rain","description":"moderate rain","icon":"10n"}}]},{"date":{"year":2013,"month":8,"date":20,"hours":11,"minutes":59},"timestamp":1379674800,"metric":{"tempMin":13.92,"tempMax":15.7,"windSpeed":20.376,"rain":0,"snow":0},"imperial":{"tempMin":57.056,"tempMax":60.26,"windSpeed":12.678400000000002,"rain":0,"snow":0},"pressure":1019.61,"humidity":99,"icon":"broken_clouds_day","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"},"windDeg":316,"windDir":"NW","hourly":[{"timestamp":1379635200,"date":{"year":2013,"month":8,"date":20,"hours":1,"minutes":0},"metric":{"temp":14.76,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.568,"windSpeed":null,"rain":0,"snow":0},"humidity":96,"pressure":1014.1,"windDir":"?","icon":"broken_clouds_night","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}},{"timestamp":1379646000,"date":{"year":2013,"month":8,"date":20,"hours":4,"minutes":0},"metric":{"temp":14.47,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.04600000000001,"windSpeed":null,"rain":0,"snow":0},"humidity":94,"pressure":1015.97,"windDir":"?","icon":"broken_clouds_night","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}},{"timestamp":1379656800,"date":{"year":2013,"month":8,"date":20,"hours":7,"minutes":0},"metric":{"temp":14.69,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":58.442,"windSpeed":null,"rain":0,"snow":0},"humidity":95,"pressure":1017.92,"windDir":"?","icon":"broken_clouds_day","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}},{"timestamp":1379667600,"date":{"year":2013,"month":8,"date":20,"hours":10,"minutes":0},"metric":{"temp":15.7,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":60.26,"windSpeed":null,"rain":0,"snow":0},"humidity":99,"pressure":1019.61,"windDir":"?","icon":"broken_clouds_day","condition":{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}},{"timestamp":1379710800,"date":{"year":2013,"month":8,"date":20,"hours":22,"minutes":0},"metric":{"temp":13.92,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":57.056,"windSpeed":null,"rain":0,"snow":0},"humidity":91,"pressure":1025.73,"windDir":"?","icon":"broken_clouds_night","condition":{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}}]},{"date":{"year":2013,"month":8,"date":21,"hours":11,"minutes":59},"timestamp":1379761200,"metric":{"tempMin":12.5,"tempMax":15.19,"windSpeed":22.356,"rain":4.1,"snow":0},"imperial":{"tempMin":54.5,"tempMax":59.342,"windSpeed":13.910400000000001,"rain":0.16141732283464566,"snow":0},"pressure":1021.66,"humidity":0,"icon":"rain_day","condition":{"id":501,"main":"Rain","description":"moderate rain","icon":"10d"},"windDeg":235,"windDir":"SW","hourly":[{"timestamp":1379721600,"date":{"year":2013,"month":8,"date":21,"hours":1,"minutes":0},"metric":{"temp":12.26,"windSpeed":null,"rain":0,"snow":0},"imperial":{"temp":54.068,"windSpeed":null,"rain":0,"snow":0},"humidity":94,"pressure":1027.02,"windDir":"?","icon":"few_clouds_night","condition":{"id":800,"main":"Clear","description":"sky is clear","icon":"02n"}}]},{"date":{"year":2013,"month":8,"date":22,"hours":11,"minutes":59},"timestamp":1379847600,"metric":{"tempMin":10.24,"tempMax":16.24,"windSpeed":32.76,"rain":0.89,"snow":0},"imperial":{"tempMin":50.432,"tempMax":61.232,"windSpeed":20.384,"rain":0.03503937007874016,"snow":0},"pressure":1027.12,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":317,"windDir":"NW","hourly":[]},{"date":{"year":2013,"month":8,"date":23,"hours":11,"minutes":59},"timestamp":1379934000,"metric":{"tempMin":9.24,"tempMax":16.19,"windSpeed":12.348,"rain":0.59,"snow":0},"imperial":{"tempMin":48.632000000000005,"tempMax":61.142,"windSpeed":7.683200000000001,"rain":0.023228346456692913,"snow":0},"pressure":1029.73,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":276,"windDir":"W","hourly":[]},{"date":{"year":2013,"month":8,"date":24,"hours":11,"minutes":59},"timestamp":1380020400,"metric":{"tempMin":7.48,"tempMax":12.91,"windSpeed":12.852,"rain":0.54,"snow":0},"imperial":{"tempMin":45.464,"tempMax":55.238,"windSpeed":7.9968,"rain":0.021259842519685043,"snow":0},"pressure":1028.1,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":178,"windDir":"S","hourly":[]},{"date":{"year":2013,"month":8,"date":25,"hours":11,"minutes":59},"timestamp":1380106800,"metric":{"tempMin":6.43,"tempMax":16.06,"windSpeed":11.628,"rain":0,"snow":0},"imperial":{"tempMin":43.574,"tempMax":60.908,"windSpeed":7.235200000000001,"rain":0,"snow":0},"pressure":1033.2,"humidity":0,"icon":"rain_day","condition":{"id":500,"main":"Rain","description":"light rain","icon":"10d"},"windDeg":328,"windDir":"NW","hourly":[]}],"save":true}""")

Subscribers

People subscribed via source and target branches