53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package tools
|
||
|
||
import (
|
||
"context"
|
||
"log"
|
||
"time"
|
||
"weatherstation/internal/config"
|
||
"weatherstation/internal/forecast"
|
||
)
|
||
|
||
// RunForecastFetchForDay 按指定“日期”(CST)抓取当天0点到当前时间后三小时的预报(Open-Meteo 与 彩云)
|
||
// dateStr: 形如 "2006-01-02"(按 Asia/Shanghai 解析)
|
||
func RunForecastFetchForDay(ctx context.Context, dateStr string) error {
|
||
loc, _ := time.LoadLocation("Asia/Shanghai")
|
||
if loc == nil {
|
||
loc = time.FixedZone("CST", 8*3600)
|
||
}
|
||
|
||
dayStart, err := time.ParseInLocation("2006-01-02", dateStr, loc)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
now := time.Now().In(loc)
|
||
// 窗口:dayStart .. now+3h 的各整点(写库函数内部按 issued_at=当前时间)
|
||
// 目前 open-meteo 与彩云抓取函数都是"取未来三小时"的固定窗口。
|
||
// 这里采用:先执行一次 open-meteo 与彩云的"未来三小时"写入,作为当下 issued 版本。
|
||
|
||
log.Printf("开始抓取 Open-Meteo 预报...")
|
||
if err := forecast.RunOpenMeteoFetch(ctx); err != nil {
|
||
log.Printf("Open-Meteo 抓取失败: %v", err)
|
||
} else {
|
||
log.Printf("Open-Meteo 抓取完成")
|
||
}
|
||
|
||
token := config.GetConfig().Forecast.CaiyunToken
|
||
log.Printf("彩云 token: %s", token)
|
||
if token != "" {
|
||
log.Printf("开始抓取彩云预报...")
|
||
if err := forecast.RunCaiyunFetch(ctx, token); err != nil {
|
||
log.Printf("彩云 抓取失败: %v", err)
|
||
} else {
|
||
log.Printf("彩云抓取完成")
|
||
}
|
||
} else {
|
||
log.Printf("未配置彩云 token,跳过彩云抓取")
|
||
}
|
||
|
||
_ = dayStart
|
||
_ = now
|
||
return nil
|
||
}
|