diff --git a/pkg/router/media.go b/pkg/router/media.go index 1746530..809ba04 100644 --- a/pkg/router/media.go +++ b/pkg/router/media.go @@ -85,6 +85,9 @@ func MediaRouter(r *gin.RouterGroup) { tag.POST("list", serviceCast.ListCastTags) tag.POST("import-batch", serviceCast.ImportTagBatch) tag.POST("recalculate-quote-count", serviceCast.RecalculateCastTagQuoteCount) + tag.POST("auto-hashtags", serviceCast.AutoHashtags) + tag.POST("recommend-hashtags", serviceCast.RecommendHashtags) + tag.POST("search-hashtags", serviceCast.SearchHashtags) } //AI 生图 diff --git a/pkg/service/cast/tag.go b/pkg/service/cast/tag.go index d941f74..aed7f4d 100644 --- a/pkg/service/cast/tag.go +++ b/pkg/service/cast/tag.go @@ -1,7 +1,10 @@ package cast import ( + "context" + "errors" "fmt" + "fonchain-fiee/api/aryshare" "fonchain-fiee/api/cast" "fonchain-fiee/cmd/config" "fonchain-fiee/pkg/model/login" @@ -169,3 +172,94 @@ func RecalculateCastTagQuoteCount(ctx *gin.Context) { service.Success(ctx, resp) return } + +// AutoHashtags 自动生成标签 +func AutoHashtags(ctx *gin.Context) { + var req *aryshare.AutoHashtagsRequest + var err error + if err = ctx.ShouldBind(&req); err != nil { + service.Error(ctx, err) + return + } + if req.Post == "" { + err = errors.New("帖子内容不能为空") + service.Error(ctx, err) + return + } + // post 的长度不能超过1000个字符 + if len(req.Post) > 1000 { + err = errors.New("帖子内容不能超过1000个字符") + service.Error(ctx, err) + return + } + // 调用 utils 提取标签 + tags := utils.ExtractTags(req.Post) + fmt.Println("tags", tags) + // 根据这里的tags 的数量,来决定 req.Max 的值 + // 确保标签总数是5 + if len(tags) >= 5 { + // 直接返回当前帖子的标签已经有5个了 + service.Success(ctx, map[string]interface{}{ + "message": "当前帖子的标签已经有5个了", + }) + return + } + // 确保标签总数是5 + if len(tags) < 5 { + req.Max = int32(5 - len(tags)) + } + if req.Position == "" { + // 未设置位置,默认使用末尾 + req.Position = "end" + } + if req.Language == "" { + // 未设置语种,默认使用中文 + req.Language = "zh" + } + // 调用 Ayrshare 的 AutoHashtags 接口 + resp, err := service.AyrshareProvider.AutoHashtags(context.Background(), req) + if err != nil { + zap.L().Error("AutoHashtags failed", zap.Error(err)) + service.Error(ctx, err) + return + } + service.Success(ctx, resp) + return +} + +// RecommendHashtags 推荐标签 +func RecommendHashtags(ctx *gin.Context) { + var req *aryshare.RecommendHashtagsRequest + var err error + if err = ctx.ShouldBind(&req); err != nil { + service.Error(ctx, err) + return + } + resp, err := service.AyrshareProvider.RecommendHashtags(context.Background(), req) + if err != nil { + zap.L().Error("RecommendHashtags failed", zap.Error(err)) + err = errors.New("推荐标签失败") + service.Error(ctx, err) + return + } + service.Success(ctx, resp) + return +} + +// SearchHashtags 搜索标签 +func SearchHashtags(ctx *gin.Context) { + var req *aryshare.SearchHashtagsRequest + var err error + if err = ctx.ShouldBind(&req); err != nil { + service.Error(ctx, err) + return + } + resp, err := service.AyrshareProvider.SearchHashtags(context.Background(), req) + if err != nil { + zap.L().Error("SearchHashtags failed", zap.Error(err)) + service.Error(ctx, err) + return + } + service.Success(ctx, resp) + return +}