https://github.com/briandowns/openweathermap
Go (golang) package for use with openweathermap.org's API.
https://github.com/briandowns/openweathermap
go golang openweathermap-api weather
Last synced: 5 months ago
JSON representation
Go (golang) package for use with openweathermap.org's API.
- Host: GitHub
- URL: https://github.com/briandowns/openweathermap
- Owner: briandowns
- License: apache-2.0
- Created: 2014-10-12T20:23:47.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2024-12-20T15:39:56.000Z (10 months ago)
- Last Synced: 2025-04-07T16:13:14.640Z (7 months ago)
- Topics: go, golang, openweathermap-api, weather
- Language: Go
- Homepage:
- Size: 799 KB
- Stars: 247
- Watchers: 8
- Forks: 74
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Changelog: history.go
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# OpenWeatherMap Go API
[](https://godoc.org/github.com/briandowns/openweathermap) [](https://travis-ci.org/briandowns/openweathermap) [](https://coveralls.io/github/briandowns/openweathermap?branch=master)
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](https://briandowns.github.io/openweathermap)!
To use the OpenweatherMap API, you need to obtain an API key. Sign up [here](http://home.openweathermap.org/users/sign_up). Once you have your key, create an environment variable called `OWM_API_KEY`. Start coding!
[Slack Channel](https://openweathermapgolang.slack.com/messages/general)
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
- Current
- Historical### Pollution Data
- Current
## 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
```bash
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.
```Go
package mainimport (
"log"
"fmt"
"os"// Shortening the import reference name seems to make it a bit easier
owm "github.com/briandowns/openweathermap"
)var apiKey = os.Getenv("OWM_API_KEY")
func main() {
w, err := owm.NewCurrent("F", "ru", apiKey) // fahrenheit (imperial) with Russian output
if err != nil {
log.Fatalln(err)
}w.CurrentByName("Phoenix")
fmt.Println(w)
}```
### Current Conditions by location name
```Go
func main() {
w, err := owm.NewCurrent("K", "EN", apiKey) // (internal - OpenWeatherMap reference for kelvin) with English output
if err != nil {
log.Fatalln(err)
}w.CurrentByName("Phoenix,AZ")
fmt.Println(w)
}
```### Forecast Conditions in imperial (fahrenheit) by coordinates
```Go
func main() {
w, err := owm.NewForecast("5", "F", "FI", apiKey) // valid options for first parameter are "5" and "16"
if err != nil {
log.Fatalln(err)
}w.DailyByCoordinates(
&owm.Coordinates{
Longitude: -112.07,
Latitude: 33.45,
},
5 // five days forecast
)
fmt.Println(w)
}
```### Current conditions in metric (celsius) by location ID
```Go
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
```Go
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
```Go
func main() {
client := &http.Client{}
w, err := owm.NewCurrent("F", "EN", apiKey, owm.WithHttpClient(client))
if err != nil {
log.Fatalln(err)
}
}
```### Current UV conditions
```Go
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
```Go
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
```Go
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
```Go
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
```Go
func main() {
// Possibility to exclude information. For example exclude daily information []string{ExcludeDaily}
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)
}
```