157 lines
3.0 KiB
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)
|
|
}
|