feat: add like and favorite functionality for feeds (#207)
* feat: add like and favorite functionality for feeds - Implemented handleLikeFeed and handleFavoriteFeed methods in mcp_handlers.go to manage liking and favoriting feeds. - Added LikeFavoriteArgs struct in mcp_server.go for handling parameters. - Registered new MCP tools for liking and favoriting feeds in registerTools function. - Introduced LikeFeed and FavoriteFeed methods in XiaohongshuService to interact with the respective actions. - Created LikeFavoriteAction in a new file to encapsulate the logic for liking and favoriting feeds on the Xiaohongshu platform. * "Fix-build-errors" * refactor: streamline like and favorite actions in LikeFavoriteAction - Introduced a generic method `performInteractAction` to handle both liking and favoriting feeds, reducing code duplication. - Updated logging to reflect the action type being performed (like or favorite). - Enhanced state verification after interaction to ensure accurate feedback on success or failure. - Removed the `clickLastMatch` function, simplifying the interaction logic. * "Add-unlike-and-unfavorite-functionality" * "Refactor-performInteractAction-function" * "Refactor-split-LikeFavoriteAction-into-separate-actions" --------- Co-authored-by: chekayo <9827969+chekayo@user.noreply.gitee.com>
This commit is contained in:
@@ -391,6 +391,78 @@ func (s *AppServer) handleUserProfile(ctx context.Context, args map[string]any)
|
||||
}
|
||||
}
|
||||
|
||||
// handleLikeFeed 处理点赞/取消点赞
|
||||
func (s *AppServer) handleLikeFeed(ctx context.Context, args map[string]interface{}) *MCPToolResult {
|
||||
feedID, ok := args["feed_id"].(string)
|
||||
if !ok || feedID == "" {
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: "操作失败: 缺少feed_id参数"}}, IsError: true}
|
||||
}
|
||||
xsecToken, ok := args["xsec_token"].(string)
|
||||
if !ok || xsecToken == "" {
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: "操作失败: 缺少xsec_token参数"}}, IsError: true}
|
||||
}
|
||||
unlike, _ := args["unlike"].(bool)
|
||||
|
||||
var res *ActionResult
|
||||
var err error
|
||||
|
||||
if unlike {
|
||||
res, err = s.xiaohongshuService.UnlikeFeed(ctx, feedID, xsecToken)
|
||||
} else {
|
||||
res, err = s.xiaohongshuService.LikeFeed(ctx, feedID, xsecToken)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
action := "点赞"
|
||||
if unlike {
|
||||
action = "取消点赞"
|
||||
}
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: action + "失败: " + err.Error()}}, IsError: true}
|
||||
}
|
||||
|
||||
action := "点赞"
|
||||
if unlike {
|
||||
action = "取消点赞"
|
||||
}
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: fmt.Sprintf("%s成功 - Feed ID: %s", action, res.FeedID)}}}
|
||||
}
|
||||
|
||||
// handleFavoriteFeed 处理收藏/取消收藏
|
||||
func (s *AppServer) handleFavoriteFeed(ctx context.Context, args map[string]interface{}) *MCPToolResult {
|
||||
feedID, ok := args["feed_id"].(string)
|
||||
if !ok || feedID == "" {
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: "操作失败: 缺少feed_id参数"}}, IsError: true}
|
||||
}
|
||||
xsecToken, ok := args["xsec_token"].(string)
|
||||
if !ok || xsecToken == "" {
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: "操作失败: 缺少xsec_token参数"}}, IsError: true}
|
||||
}
|
||||
unfavorite, _ := args["unfavorite"].(bool)
|
||||
|
||||
var res *ActionResult
|
||||
var err error
|
||||
|
||||
if unfavorite {
|
||||
res, err = s.xiaohongshuService.UnfavoriteFeed(ctx, feedID, xsecToken)
|
||||
} else {
|
||||
res, err = s.xiaohongshuService.FavoriteFeed(ctx, feedID, xsecToken)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
action := "收藏"
|
||||
if unfavorite {
|
||||
action = "取消收藏"
|
||||
}
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: action + "失败: " + err.Error()}}, IsError: true}
|
||||
}
|
||||
|
||||
action := "收藏"
|
||||
if unfavorite {
|
||||
action = "取消收藏"
|
||||
}
|
||||
return &MCPToolResult{Content: []MCPContent{{Type: "text", Text: fmt.Sprintf("%s成功 - Feed ID: %s", action, res.FeedID)}}}
|
||||
}
|
||||
|
||||
// handlePostComment 处理发表评论到Feed
|
||||
func (s *AppServer) handlePostComment(ctx context.Context, args map[string]interface{}) *MCPToolResult {
|
||||
logrus.Info("MCP: 发表评论到Feed")
|
||||
|
||||
Reference in New Issue
Block a user