OpenWeatherMap Go API
Go (golang) package for use with openweathermap.org's API.
For more detail about the library and its features, reference your local godoc once installed.
Website!
To use the OpenweatherMap API, you need to obtain an API key. Sign up here. Once you have your key, create an environment variable called OWM_API_KEY
. Start coding!
Slack Channel
Contributions welcome!
Features
Current Weather Conditions
- By City
- By City,St (State)
- By City,Co (Country)
- By City ID
- By Zip,Co (Country)
- By Longitude and Latitude
Forecast
Get the weather conditions for a given number of days.
- By City
- By City,St (State)
- By City,Co (Country)
- By City ID
- By Longitude and Latitude
Access to Condition Codes and Icons
Gain access to OpenWeatherMap icons and condition codes.
- Thunderstorms
- Drizzle
- Rain
- Snow
- Atmosphere
- Clouds
- Extreme
- Additional
Data Available in Multiple Measurement Systems
- Fahrenheit (OpenWeatherMap API - imperial)
- Celsius (OpenWeatherMap API - metric)
- Kelvin (OpenWeatherMap API - internal)
UV Index Data
Pollution Data
Historical Conditions
- By Name
- By ID
- By Coordinates
Supported Languages
English - en, Russian - ru, Italian - it, Spanish - es (or sp), Ukrainian - uk (or ua), German - de, Portuguese - pt, Romanian - ro, Polish - pl, Finnish - fi, Dutch - nl, French - fr, Bulgarian - bg, Swedish - sv (or se), Chinese Traditional - zh_tw, Chinese Simplified - zh (or zh_cn), Turkish - tr, Croatian - hr, Catalan - ca
Installation
go get github.com/briandowns/openweathermap
Examples
There are a few full examples in the examples directory that can be referenced. 1 is a command line application and 1 is a simple web application.
package main
import (
"log"
"fmt"
"os"
owm "github.com/briandowns/openweathermap"
)
var apiKey = os.Getenv("OWM_API_KEY")
func main() {
w, err := owm.NewCurrent("F", "ru", apiKey)
if err != nil {
log.Fatalln(err)
}
w.CurrentByName("Phoenix")
fmt.Println(w)
}
Current Conditions by location name
func main() {
w, err := owm.NewCurrent("K", "EN", apiKey)
if err != nil {
log.Fatalln(err)
}
w.CurrentByName("Phoenix,AZ")
fmt.Println(w)
}
Forecast Conditions in imperial (fahrenheit) by coordinates
func main() {
w, err := owm.NewForecast("5", "F", "FI", apiKey)
if err != nil {
log.Fatalln(err)
}
w.DailyByCoordinates(
&owm.Coordinates{
Longitude: -112.07,
Latitude: 33.45,
},
5
)
fmt.Println(w)
}
Current conditions in metric (celsius) by location ID
func main() {
w, err := owm.NewCurrent("C", "PL", apiKey)
if err != nil {
log.Fatalln(err)
}
w.CurrentByID(2172797)
fmt.Println(w)
}
Current conditions by zip code. 2 character country code required
func main() {
w, err := owm.NewCurrent("F", "EN", apiKey)
if err != nil {
log.Fatalln(err)
}
w.CurrentByZip(19125, "US")
fmt.Println(w)
}
Configure http client
func main() {
client := &http.Client{}
w, err := owm.NewCurrent("F", "EN", apiKey, owm.WithHttpClient(client))
if err != nil {
log.Fatalln(err)
}
}
Current UV conditions
func main() {
uv, err := owm.NewUV(apiKey)
if err != nil {
log.Fatalln(err)
}
coord := &owm.Coordinates{
Longitude: 53.343497,
Latitude: -6.288379,
}
if err := uv.Current(coord); err != nil {
log.Fatalln(err)
}
fmt.Println(coord)
}
Historical UV conditions
func main() {
uv, err := owm.NewUV(apiKey)
if err != nil {
log.Fatalln(err)
}
coord := &owm.Coordinates{
Longitude: 54.995656,
Latitude: -7.326834,
}
end := time.Now().UTC()
start := time.Now().UTC().Add(-time.Hour * time.Duration(24))
if err := uv.Historical(coord, start, end); err != nil {
log.Fatalln(err)
}
}
UV Information
func main() {
uv, err := owm.NewUV(apiKey)
if err != nil {
log.Fatalln(err)
}
coord := &owm.Coordinates{
Longitude: 53.343497,
Latitude: -6.288379,
}
if err := uv.Current(coord); err != nil {
log.Fatalln(err)
}
info, err := uv.UVInformation()
if err != nil {
log.Fatalln(err)
}
fmt.Println(info)
}
Pollution Information
func main() {
pollution, err := owm.NewPollution(apiKey)
if err != nil {
log.Fatalln(err)
}
params := &owm.PollutionParameters{
Location: owm.Coordinates{
Latitude: 0.0,
Longitude: 10.0,
},
Datetime: "current",
}
if err := pollution.PollutionByParams(params); err != nil {
log.Fatalln(err)
}
}
One Call Information
func main() {
w, err := owm.NewOneCall("F", "EN", apiKey, []string{})
if err != nil {
log.Fatalln(err)
}
err = w.OneCallByCoordinates(
&Coordinates{
Longitude: -112.07,
Latitude: 33.45,
},
)
if err != nil {
t.Error(err)
}
fmt.Println(w)
}