Files
webp/api/gorse.go

120 lines
2.9 KiB
Go

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
}
if len(data) == 0 {
fmt.Println("没有需要同步的点赞记录")
time.Sleep(60 * time.Second)
continue
}
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))
}
}
// 同步收藏数据
// 获取推荐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
}