DarkSky.jl v0.1
Mar 26, 2018 · 493 words · 3 minutes read
I’m very happy to announce the initial release of DarkSky.jl, a Julia package for the Dark Sky API. The Dark Sky API provides weather forecasts, current conditions, and historical data with global coverage. DarkSky.jl provides access to the Dark Sky API through Julia.
Installation
DarkSky.jl is registered as an official package, so you can install it as normal:
Pkg.add("DarkSky")
You can install the development version from GitHub:
Pkg.clone("git://github.com/ellisvalentiner/DarkSky.jl.git")
The Dark Sky API requires an API key and DarkSky.jl expects your API key to be stored as an environment variable named DARKSKY_API_KEY
. You can request an API key from the Dark Sky Developer Documentation page.
Usage
The basic usage is to request the current weather forecast (a Forecast Request) or the observed or forecast weather conditions for a datetime in the past or future (a Time Machine Request).
To make either a Forecast Request or Time Machine Request, use the forecast
function.
julia> using DarkSky
julia> response = forecast(42.3601, -71.0589, DateTime(2018, 3, 26, 16, 0, 0));
The response is a DarkSkyResponse
type, which has the following properties:
latitude
- The requested latitude.longitude
- The requested longitude.timezone
- The IANA timezone name for the requested location.currently
- A data point containing the current weather conditions at the requested location. (optional)minutely
- A data block containing the weather conditions minute-by-minute for the next hour. (optional)hourly
- A data block containing the weather conditions hour-by-hour for the next two days. (optional)daily
- A data block containing the weather conditions day-by-day for the next week. (optional)alerts
- An alerts array, which, if present, contains any severe weather alerts pertinent to the requested location. (optional)flags
- A flags object containing miscellaneous metadata about the request. (optional)
These properties can be accessed using functions with the same names.
For example the hour-by-hour weather conditions can be accessed using the hourly
function, which returns a Dict.
julia> weather = hourly(response)
Dict{String,Any} with 3 entries:
"summary" => "Clear throughout the day."
"icon" => "clear-day"
"data" => Any[Dict{String,Any}(Pair{String,Any}("visibility", 9.59),Pair{S…
julia> weather["summary"]
"Clear throughout the day."
Once you have the data, you can the plot it (or do whatever you like)!
julia> using Plots
julia> using Base.Dates
julia>
x = [unix2datetime(x["time"]) for x in hourly(response)["data"]];
julia> y = [x["temperature"] for x in hourly(response)["data"]];
julia> plot(x, y,
title="Hourly temperature",
xlabel="Timestamp", ylabel="Temperature (°F)",
shape=:circle, color=:blue, label="Temperature", legend=false,
lw=2)
Plot{Plots.GRBackend}()
julia> savefig("static/images/darksky-hour-by-hour.png")
What’s next
As it turns out, DarkSky.jl v0.1.0 contains a mistake that prevents forecast
from correctly fufilling a Time Machine Request (it returns the current conditions). So DarkSky.jl v0.1.1 is already tagged on GitHub and awaiting release with the fix.
Currently DarkSky.jl contains few features – it really only facilitates the API request and defines a type for the response. In future releases, I plan to define additional types (e.g. Data Point, Data Block) and extend functionality so the data is easy to work with.
Comments, issue reports, and contributions are welcome on the DarkSky.jl GitHub repo.