A Pirate Weather API wrapper
Project description
pirateweatherlib
This library for the Pirate Weather API provides access to detailed weather information from around the globe.
It has been adapted from darkskylib.
Quick start
Before you start using this library, you need to get your API key here.
API Calls
Function forecast
handles all request parameters and returns a
Forecast
object.
>>> from pirateweather 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. Using
timeout
argument will set default request
timeout
.
>>> 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. Use
timeout
argument to set the request timeout.
>>> 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 pirateweather 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] (https://raw.githubusercontent.com/noblecloud/pirateweatherlib/master/LICENSE)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pirateweatherlib-0.4.0.tar.gz
.
File metadata
- Download URL: pirateweatherlib-0.4.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.10.10 Darwin/22.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85d77a754947222f3652950d8263940f838238f7800902afb8b9cca49e8c9a03 |
|
MD5 | f69b5a481dc9e88e96cd844eaeb79a3c |
|
BLAKE2b-256 | f17c48793cb1f2929f377604adc5072b4e597f05dca54d2a2894a40dbaed49dd |
File details
Details for the file pirateweatherlib-0.4.0-py3-none-any.whl
.
File metadata
- Download URL: pirateweatherlib-0.4.0-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.10.10 Darwin/22.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7bf80a5017dd2eab46692fb89e49f8e263e2d16fe500a8f48e063701885a0783 |
|
MD5 | 6348cbbf549ab8288bd3453ba02198d8 |
|
BLAKE2b-256 | 77b80a9b3e072d607c74c3bc1a26a199920341fd8f17e1df52ac6776e155dcc4 |