package api import ( "context" "fmt" "strconv" "strings" "time" "github.com/zhenghaoz/gorse/client" ) var gorse *client.GorseClient func GorseInit(host string, port int) { gorse = client.NewGorseClient(fmt.Sprintf("http://%s:%d", host, port), "") } // 同步图片数据 func PutImages(page int) error { var ctx context.Context = context.Background() for i := 0; i < page; i++ { var items []client.Item var data []Image if err := db.Table("web_images").Select("id", "tags", "create_time").Limit(100).Offset(i * 100).Scan(&data).Error; err != nil { fmt.Println("获取图像记录失败", err) return err } for _, item := range data { fmt.Println(item.ID, item.Tags, item.CreateTime) items = append(items, client.Item{ ItemId: fmt.Sprintf("%d", item.ID), Timestamp: item.CreateTime.Format("2006-01-02 15:04:05"), Labels: strings.Split(item.Tags, ", "), Comment: fmt.Sprintf("%d", item.Content), }) } if _, err := gorse.InsertItems(ctx, items); err != nil { fmt.Println("写入图像记录失败", err) return err } } fmt.Println("写入图像记录结束..", page*100) return nil } // 同步点赞数据 func PutPraises() { var ctx context.Context = context.Background() for { time.Sleep(1 * time.Second) var feedbacks []client.Feedback var data []struct { ID int PraiseID int UserID int CreateTime time.Time } if err := db.Table("web_praise").Select("id", "praise_id", "user_id", "create_time").Where("gorse = false").Where("type = ?", 4).Limit(100).Scan(&data).Error; err != nil { fmt.Println("获取图像点赞记录失败", err) return } var ids []int for _, item := range data { feedbacks = append(feedbacks, client.Feedback{ FeedbackType: "like", UserId: fmt.Sprintf("%d", item.UserID), ItemId: fmt.Sprintf("%d", item.PraiseID), Timestamp: item.CreateTime.Format("2006-01-02 15:04:05"), }) ids = append(ids, item.ID) } if err := db.Table("web_praise").Where("id in (?)", ids).Update("gorse", true).Error; err != nil { fmt.Println("更新点赞记录失败", err) return } if _, err := gorse.InsertFeedback(ctx, feedbacks); err != nil { fmt.Println("写入点赞记录失败", err) return } fmt.Println("写入点赞记录结束", len(ids)) if len(data) < 100 { time.Sleep(60 * time.Second) } } } // 同步收藏数据 // 获取推荐ID func GetRecommend(user_id int, categorys []string) ([]int, error) { var ctx context.Context = context.Background() var ids []int data, err := gorse.GetItemRecommend(ctx, fmt.Sprintf("%d", user_id), categorys, "read", "0", 100, 0) if err != nil { fmt.Println("获取推荐失败", err) return ids, err } for _, item := range data { id, _ := strconv.Atoi(item) ids = append(ids, id) } return ids, nil }