初始化项目文件

This commit is contained in:
2025-07-11 16:54:11 +08:00
parent 6bffd582a0
commit 39fedaac16
213 changed files with 16944 additions and 0 deletions

View 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
}
}