Skip to main content

The Dark Sky API wrapper

Project description

This Python library for the Dark Sky API provides access to detailed weather information from around the globe.

Quick start

Before you start using this library, you need to get your API key here.

Installation

pip install darkskylib

API Calls

Function forecast handles all request parameters and returns a Forecast object.

>>> from darksky import forecast
>>> boston = forecast(key, 42.3601, -71.0589)
>>>

The first 3 positional arguments are identical to the 3 required parameters for API call. The optional query parameters need to be provided as keyword arguments.

Using time argument will get you a time machine call.

>>> BOSTON = key, 42.3601, -71.0589
>>> from datetime import datetime as dt
>>> t = dt(2013, 5, 6, 12).isoformat()
>>> boston = forecast(*BOSTON, time=t)
>>> boston.time
1367866800

Data Points and Data Blocks

The values as well as DataPoint and DataBlock objects are accessed using instance attributes or dictionary keys. You can access current values directly, without going through currently data point.

>>> boston['currently']['temperature']
60.72
>>> boston.temperature
60.72

Data blocks are indexable and iterable by their data values.

>>> len(boston.hourly)
24
>>>
>>> boston.hourly[1].temperature
59.49
>>>
>>> # list temperatures for next 10 hours
... [hour.temperature for hour in boston.hourly[:10]]
[60.83, 59.49, 58.93, 57.95, 56.01, 53.95, 51.21, 49.21, 47.95, 46.31]

Nonexistent attributes will raise AttributeError and dictionary keys KeyError the way you’d expect.

Raw data

To get the raw data dictionary, you can either access it through instance attributes or navigate to it through dictionary keys, the same way you would navigate the actual dictionary.

>>> boston.hourly[2]
{'ozone': 290.06, 'temperature': 58.93, 'pressure': 1017.8, 'windBearing': 274, 'dewPoint': 52.58, 'cloudCover': 0.29, 'apparentTemperature': 58.93, 'windSpeed': 7.96, 'summary': 'Partly Cloudy', 'icon': 'partly-cloudy-night', 'humidity': 0.79, 'precipProbability': 0, 'precipIntensity': 0, 'visibility': 8.67, 'time': 1476410400}
>>>
>>> boston['hourly']['data'][2]
{'ozone': 290.06, 'temperature': 58.93, 'pressure': 1017.8, 'windBearing': 274, 'dewPoint': 52.58, 'cloudCover': 0.29, 'apparentTemperature': 58.93, 'windSpeed': 7.96, 'summary': 'Partly Cloudy', 'icon': 'partly-cloudy-night', 'humidity': 0.79, 'precipProbability': 0, 'precipIntensity': 0, 'visibility': 8.67, 'time': 1476410400}

Flags and Alerts

All dashes - in attribute names of Flags objects are replaced by underscores _. This doesn’t affect the dictionary keys.

>>> # instead of 'boston.flags.isd-stations'
... boston.flags.isd_stations
['383340-99999', '383390-99999', '383410-99999', '384620-99999', '384710-99999']
>>>
>>> boston.flags['isd-stations']
['383340-99999', '383390-99999', '383410-99999', '384620-99999', '384710-99999']

Even though Alerts are represented by a list, the data accessibility through instance attributes is preserved for alerts in the list.

>>> boston.alerts[0].title
'Freeze Watch for Norfolk, MA'

Updating data

Use refresh() method to update data of a Forecast object. The refresh() method takes optional queries (including time, making it a Time machine object) as keyword arguments. Calling refresh() without any arguments will set all queries to default values.

>>> boston.refresh()
>>> (boston.time, boston.temperature, len(boston.hourly))
(1476403500, 60.72, 49)
>>>
>>> boston.refresh(units='si', extend='hourly')
>>> (boston.time, boston.temperature, len(boston.hourly))
(1476404205, 15.81, 169)
>>>
>>> boston.refresh(units='us')
>>> (boston.time, boston.temperature, len(boston.hourly))
(1476404489, 60.57, 49)

For Developers

Response headers are stored in a dictionary under response_headers attribute.

>>> boston.response_headers['X-response-Time']
'146.035ms'

Example script

from darksky import forecast
from datetime import date, timedelta

BOSTON = 42.3601, 71.0589

weekday = date.today()
with forecast('API_KEY', *BOSTON) as boston:
    print(boston.daily.summary, end='\n---\n')
    for day in boston.daily:
        day = dict(day = date.strftime(weekday, '%a'),
                   sum = day.summary,
                   tempMin = day.temperatureMin,
                   tempMax = day.temperatureMax
                   )
        print('{day}: {sum} Temp range: {tempMin} - {tempMax}'.format(**day))
        weekday += timedelta(days=1)

Output:

Light rain on Friday and Saturday, with temperatures bottoming out at 48°F on Tuesday.
---
Sun: Partly cloudy in the morning. Temp range: 44.86 - 57.26°F
Mon: Mostly cloudy in the morning. Temp range: 44.26 - 55.28°F
Tue: Clear throughout the day. Temp range: 36.85 - 47.9°F
Wed: Partly cloudy starting in the afternoon, continuing until evening. Temp range: 33.23 - 47.93°F
Thu: Light rain overnight. Temp range: 35.75 - 49.71°F
Fri: Light rain in the morning and afternoon. Temp range: 45.47 - 57.11°F
Sat: Drizzle in the morning. Temp range: 43.3 - 62.08°F
Sun: Clear throughout the day. Temp range: 39.81 - 60.84°F

License

The code is available under terms of MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

darkskylib-0.3.3.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

darkskylib-0.3.3-py2.py3-none-any.whl (8.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file darkskylib-0.3.3.tar.gz.

File metadata

  • Download URL: darkskylib-0.3.3.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for darkskylib-0.3.3.tar.gz
Algorithm Hash digest
SHA256 b19c1b14b398f41d8a53378bc829fc0d26926077a2ed354ef53bbb9e7fd525d5
MD5 781f6aa425bc2342a2ef330e308fa605
BLAKE2b-256 c66bb75f0f2f47bd3f2bba9002fd3d2303cff24273d64791098aae6d875c5725

See more details on using hashes here.

File details

Details for the file darkskylib-0.3.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for darkskylib-0.3.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 eb581101221c3e5f92b2d9087f0582bc046a22127864ace11c20a604e41fc9c2
MD5 0fd41b570ae00c9162565d230bd3fd0c
BLAKE2b-256 c0bd1855523c2e6c00f66252ea9632373a239f01028fc19ce975bd16a22e3f5e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page