初始化项目文件
This commit is contained in:
171
api_iris/service/api/weather.go
Normal file
171
api_iris/service/api/weather.go
Normal file
@ -0,0 +1,171 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/kataras/iris/v12"
|
||||
"github.com/sirupsen/logrus"
|
||||
"io"
|
||||
"main/database"
|
||||
"main/model"
|
||||
"main/utils"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 获取location
|
||||
func getLocation(ctx iris.Context) {
|
||||
param := ctx.URLParam("location")
|
||||
res, err := http.Get(fmt.Sprintf("https://wis.qq.com/city/like?source=pc&city=%s", param))
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
defer func(Body io.ReadCloser) {
|
||||
err = Body.Close()
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
}(res.Body)
|
||||
body, _ := io.ReadAll(res.Body)
|
||||
var r resLocation
|
||||
//解析json结构
|
||||
err = json.Unmarshal(body, &r)
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
err = ctx.JSON(utils.FormatRes(200, "", r.Data))
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 获取天气方法
|
||||
func getWeather(ctx iris.Context) {
|
||||
user := utils.GetLoginUser(ctx)
|
||||
if utils.DataIsNil(user) {
|
||||
return
|
||||
}
|
||||
var info model.Userinfo
|
||||
db := database.GetInstance().GetMysqlDb()
|
||||
if err := db.Where("username = ?", user.Username).First(&info).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
var location []string
|
||||
if info.Location == "" {
|
||||
location = []string{"北京", "北京", "顺义"}
|
||||
} else {
|
||||
info.Location = strings.ReplaceAll(info.Location, " ", "")
|
||||
location = strings.Split(info.Location, ",")
|
||||
if len(location) < 3 {
|
||||
location = append(location, "")
|
||||
}
|
||||
}
|
||||
res, err := getMyWeather(location[0], location[1], location[2])
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
err = ctx.JSON(utils.FormatRes(200, "", res))
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 获取地点对应地址天气
|
||||
func getMyWeather(province string, city string, county string) (string, error) {
|
||||
var weather []model.Weather
|
||||
var respWeather string
|
||||
db := database.GetInstance().GetMysqlDb()
|
||||
if err := db.Where(&model.Weather{Date: time.Now().Format("2006-01-02"), Location: fmt.Sprintf("%s,%s,%s", province, city, county)}).Find(&weather).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
if len(weather) == 0 {
|
||||
resp, err := http.Get(fmt.Sprintf("https://wis.qq.com/weather/common?"+
|
||||
"source=pc&weather_type=forecast_24h&province=%s&city=%s&county=%s", url.QueryEscape(province), url.QueryEscape(city), url.QueryEscape(county)))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer func(Body io.ReadCloser) {
|
||||
err = Body.Close()
|
||||
if err != nil {
|
||||
}
|
||||
}(resp.Body)
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
var r resWeather
|
||||
//解析json结构
|
||||
err = json.Unmarshal(body, &r)
|
||||
if err != nil {
|
||||
//fmt.Println(fmt.Sprintf("https://wis.qq.com/weather/common?"+
|
||||
// "source=pc&weather_type=forecast_24h&province=%s&city=%s&county=%s", url.QueryEscape(province), url.QueryEscape(city), url.QueryEscape(county)))
|
||||
//fmt.Println(resp.Body, "----------", string(body), "----------", err)
|
||||
return "", err
|
||||
}
|
||||
todayWeather := formatWeather(r.Data.Forecast24h.D0)
|
||||
tomWeather := formatWeather(r.Data.Forecast24h.D1)
|
||||
respWeather = fmt.Sprintf("%s;%s", todayWeather, tomWeather)
|
||||
if err1 := db.Create(&model.Weather{
|
||||
Date: time.Now().Format("2006-01-02"),
|
||||
Location: fmt.Sprintf("%s,%s,%s", province, city, county),
|
||||
Weather: respWeather,
|
||||
}).Error; err1 != nil {
|
||||
logrus.Errorln("sql执行失败:", err1)
|
||||
}
|
||||
} else {
|
||||
respWeather = weather[0].Weather
|
||||
}
|
||||
return respWeather, nil
|
||||
}
|
||||
|
||||
// 天气格式化
|
||||
func formatWeather(data res24h) string {
|
||||
var weather string
|
||||
var windPower string
|
||||
var windDirection string
|
||||
var degree string
|
||||
if data.DayWeather == data.NightWeather {
|
||||
weather = data.DayWeather
|
||||
} else {
|
||||
weather = fmt.Sprintf("%s转%s", data.NightWeather, data.DayWeather)
|
||||
}
|
||||
if data.DayWindDirection == data.NightWindDirection {
|
||||
windDirection = data.DayWindDirection
|
||||
} else {
|
||||
windDirection = fmt.Sprintf("%s转%s", data.NightWindDirection, data.DayWindDirection)
|
||||
}
|
||||
if data.DayWindPower == data.NightWindPower {
|
||||
windPower = data.DayWindPower + "级"
|
||||
} else {
|
||||
windPower = fmt.Sprintf("%s~%s级", data.NightWindPower, data.DayWindPower)
|
||||
}
|
||||
degree = fmt.Sprintf("%s~%s℃", data.MinDegree, data.MaxDegree)
|
||||
return fmt.Sprintf("%s, %s, %s %s", weather, degree, windDirection, windPower)
|
||||
}
|
||||
|
||||
func testWeather(ctx iris.Context) {
|
||||
var location []string
|
||||
loc := ctx.URLParam("location")
|
||||
fmt.Println(loc)
|
||||
if loc == "" {
|
||||
location = []string{"北京", "北京", "顺义"}
|
||||
fmt.Println(location)
|
||||
} else {
|
||||
loc = strings.ReplaceAll(loc, " ", "")
|
||||
location = strings.Split(loc, ",")
|
||||
if len(location) < 3 {
|
||||
location = append(location, "")
|
||||
}
|
||||
fmt.Println(location)
|
||||
}
|
||||
res, err := getMyWeather(location[0], location[1], location[2])
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
err = ctx.JSON(utils.FormatRes(200, "", res))
|
||||
if utils.ErrHandle(ctx, err) {
|
||||
return
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user