YHGW/get_weather.go

157 lines
3.0 KiB
Go

package main
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
)
type Weather struct {
STATUS string
LANG string
UNIT string
SERVER_TIME uint16
LOCATION []float32
API_STATUS string
TZSHIFT uint16
API_VERSION string
RESULT Result
}
type Result struct {
STATUS string
O3 float32
CO float32
TEMPERATURE float32
PM10 float32
SKYCON string
CLOUDRATE float32
AQI float32
DSWRF float32
VISIBILITY float32
HUMIDITY float32
SO2 float32
ULTRAVIOLET Ultraviolet
PRES float32
PM25 float32
NO2 float32
PERCIPITATION Precipitation
COMFORT Comfort
WIND Wind
}
type Ultraviolet struct {
INDEX int
DESC string
}
type Precipitation struct {
NEAREST Nearest
LOCAL Local
}
type Nearest struct {
STATUS string
DISTANCE float32
INTENSITY float32
}
type Local struct {
STATUS string
INTENSITY int
DATASOURCE string
}
type Comfort struct {
INDEX int
DESC string
}
type Wind struct {
DIRECTION float32
SPEED float32
}
var iconurl = conf.ICONURL
// 获取天气
func get_weather() {
result, _ := http.Get("https://api.caiyunapp.com/v2/TAkhjf8d1nlSlspN/113.960256,22.541454/realtime.json")
body, _ := ioutil.ReadAll(result.Body)
log.Println(string(body))
data := Weather{}
json.Unmarshal(body, &data)
var icon string
switch data.RESULT.SKYCON {
case "CLEAR_DAY":
icon = iconurl + "CLEAR_DAY.png"
case "CLEAR_NIGHT":
icon = iconurl + "CLEAR_NIGHT.png"
case "PARTLY_CLOUDY_DAY":
icon = iconurl + "PARTLY_CLOUDY_DAY.png"
case "PARTLY_CLOUDY_NIGHT":
icon = iconurl + "PARTLY_CLOUDY_NIGHT.png"
case "CLOUDY":
icon = iconurl + "icon/CLOUDY.png"
case "RAIN":
icon = iconurl + "RAIN.png"
case "SNOW":
icon = iconurl + "SNOW.png"
case "WIND":
icon = iconurl + "WIND.png"
case "HAZE":
icon = iconurl + "HAZE.png"
}
insert_db(data, icon)
}
func insert_db(data Weather, icon string) {
stmt, _ := db.Prepare(`INSERT INTO weather (
skycon,
icon_url,
o3,
co,
so2,
no2,
temperature,
humidity,
pm25,
pm10,
cloudrate,
aqi,
dswrf,
visibility,
ultraviolet_desc,
pres,
precipitation_nearest_distance,
precipitation_nearest_intensity,
precipitation_local_intensity,
comfort_desc,
wind_direction,
wind_speed) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
stmt.Exec(
data.RESULT.SKYCON,
icon,
data.RESULT.O3,
data.RESULT.CO,
data.RESULT.SO2,
data.RESULT.NO2,
data.RESULT.TEMPERATURE,
data.RESULT.HUMIDITY,
data.RESULT.PM25,
data.RESULT.PM10,
data.RESULT.CLOUDRATE,
data.RESULT.AQI,
data.RESULT.DSWRF,
data.RESULT.VISIBILITY,
data.RESULT.ULTRAVIOLET.DESC,
data.RESULT.PRES,
data.RESULT.PERCIPITATION.NEAREST.DISTANCE,
data.RESULT.PERCIPITATION.NEAREST.INTENSITY,
data.RESULT.PERCIPITATION.LOCAL.INTENSITY,
data.RESULT.COMFORT.DESC,
data.RESULT.WIND.DIRECTION,
data.RESULT.WIND.SPEED)
}