package hottop import ( "fmt" "go-wechat/client" "go-wechat/common/types" "go-wechat/model/entity" "go-wechat/service" "go-wechat/utils" "log" "slices" "strings" "time" ) // HotTop // @description: 热搜排行榜 func HotTop() { // 发送到开启了的群 groups, err := service.GetAllEnableHotTop() if err != nil { log.Printf("获取启用了热榜的群组失败, 错误信息: %v", err) return } // 获取热榜数据 news := getTopData() if len(news) == 0 { return } // 组装消息 msg := fmt.Sprintf("#热搜排行榜\n \n嘿,朋友,有新的新闻了喔,快来康康吧\n \n%s", strings.Join(news, "\n-------\n")) for _, group := range groups { utils.SendMessage(group.Wxid, "", msg, 0) // 休眠一秒,防止频繁发送 time.Sleep(time.Second) } } // getTopData // @description: 获取热榜数据 // @return data func getTopData() (data []string) { // 获取热榜数据 records := utils.NewsUtil().GetHotTop() if len(records) == 0 { log.Println("获取热榜数据失败") return } var datas = make([]entity.HotTop, 0) for _, item := range records { var d = entity.HotTop{ CreatedAt: types.DateTime(time.Now().Local()), Title: item.Title, Hot: item.Hot, Url: item.Url, MobileUrl: item.MobilUrl, } datas = append(datas, d) } // 获取缓存数据 var oldTitles []string err := client.MySQL.Model(&entity.HotTop{}).Order("created_at DESC").Limit(len(datas)).Pluck("title", &oldTitles).Error if err != nil { log.Println("获取历史热榜数据失败", err) return } // 筛选出新数据 var newDatas []entity.HotTop for _, d := range datas { if slices.Contains(oldTitles, d.Title) { continue } d.Channel = "百度" newDatas = append(newDatas, d) data = append(data, fmt.Sprintf("标题: %s\n热度: %s\n详情: %s", d.Title, d.Hot, d.Url)) } // 保存新数据到数据库 if len(newDatas) > 0 { err = client.MySQL.Create(&newDatas).Error if err != nil { log.Println("保存新热榜数据失败", err) } } return }