· 6 years ago · Oct 03, 2019, 06:42 PM
1from django.db import models
2from django.core.exceptions import ObjectDoesNotExist
3from django.utils.timezone import now
4from darksky.api import DarkSky
5from django.utils.dateparse import parse_date
6from datetime import datetime
7from darksky.types import languages, units, weather
8from portfolio.settings import DARKSKY_API_KEY
9
10
11class DarkSkyApi(models.Model):
12 forecast_summary = models.CharField(max_length=1000)
13 forecast_temperature = models.FloatField()
14 forecast_humidity = models.FloatField()
15 forecast_windspeed = models.FloatField()
16 forecast_pressure = models.FloatField()
17 forecast_date = models.DateTimeField(default=now())
18
19 # init with API key
20 darksky = DarkSky(DARKSKY_API_KEY)
21
22 # set location
23 latitude = 50
24 longitude = 20
25
26 class Meta:
27 verbose_name = "Weather Data"
28 verbose_name_plural = "Weather Data"
29
30 def get(self):
31 try:
32 result = self.get_data_from_database()
33 except ObjectDoesNotExist as e:
34 print(e)
35 else:
36 result = self.get_weather_data()
37 return result
38
39 def get_data_from_database(self):
40 try:
41 qs = DarkSkyApi.objects.get(forecast_date=now())
42 except ObjectDoesNotExist as e:
43 pass # todo
44 else:
45 qs = self.get_weather_data()
46 return qs
47
48 def put_data_to_datadase(self):
49 DarkSkyApi.save(self)
50
51 def get_weather_data(self):
52 forecast = self.darksky.get_forecast(
53 self.latitude, self.longitude,
54 extend=False, # default `False`
55 lang=languages.ENGLISH, # default `ENGLISH`
56 units=units.AUTO, # default `auto`
57 exclude=[weather.MINUTELY, weather.ALERTS] # default `[]`
58 )
59 return forecast