| // 搜索推荐算法相关的API接口 |
| // 仅首页推荐和搜索使用 JWLLL 后端服务 |
| // 其他功能使用对应的后端服务 |
| |
| // JWLLL 后端服务 - 仅用于推荐和搜索 |
| const JWLLL_BASE_URL = 'http://10.126.59.25:5717' |
| // WZY 后端服务 - 用于帖子详情、点赞、评论等 |
| const WZY_BASE_URL = 'http://192.168.5.235:5714' |
| |
| // 通用请求函数 |
| const request = async (url, options = {}) => { |
| try { |
| const response = await fetch(url, { |
| headers: { |
| 'Content-Type': 'application/json', |
| ...options.headers |
| }, |
| ...options |
| }) |
| return await response.json() |
| } catch (error) { |
| console.error('API请求错误:', error) |
| throw error |
| } |
| } |
| |
| // 搜索推荐API |
| export const searchAPI = { |
| // ===== 推荐和搜索功能 - 使用 JWLLL 服务 ===== |
| |
| // 搜索内容 |
| search: async (keyword, category = undefined) => { |
| return await request(`${JWLLL_BASE_URL}/search`, { |
| method: 'POST', |
| body: JSON.stringify({ keyword, category }) |
| }) |
| }, |
| |
| // 获取用户标签 |
| getUserTags: async (userId) => { |
| return await request(`${JWLLL_BASE_URL}/user_tags?user_id=${userId}`) |
| }, |
| |
| // 标签推荐 |
| recommendByTags: async (userId, tags) => { |
| return await request(`${JWLLL_BASE_URL}/recommend_tags`, { |
| method: 'POST', |
| body: JSON.stringify({ user_id: userId, tags }) |
| }) |
| }, |
| |
| // 协同过滤推荐 |
| userBasedRecommend: async (userId, topN = 20) => { |
| return await request(`${JWLLL_BASE_URL}/user_based_recommend`, { |
| method: 'POST', |
| body: JSON.stringify({ user_id: userId, top_n: topN }) |
| }) |
| }, |
| |
| // ===== 其他功能 - 使用 WZY 服务 ===== |
| |
| // 获取帖子详情 |
| getPostDetail: async (postId) => { |
| return await request(`${WZY_BASE_URL}/posts/${postId}`) |
| }, |
| // 点赞帖子 |
| likePost: async (postId, userId) => { |
| return await request(`${WZY_BASE_URL}/posts/${postId}/like`, { |
| method: 'POST', |
| body: JSON.stringify({ user_id: userId }) |
| }) |
| }, |
| |
| // 取消点赞 |
| unlikePost: async (postId, userId) => { |
| return await request(`${WZY_BASE_URL}/posts/${postId}/like`, { |
| method: 'DELETE', |
| body: JSON.stringify({ user_id: userId }) |
| }) |
| }, |
| |
| // 添加评论 |
| addComment: async (postId, userId, content) => { |
| return await request(`${WZY_BASE_URL}/posts/${postId}/comments`, { |
| method: 'POST', |
| body: JSON.stringify({ user_id: userId, content }) |
| }) |
| }, // 获取评论 |
| getComments: async (postId) => { |
| const comments = await request(`${WZY_BASE_URL}/posts/${postId}/comments`) |
| // 适配数据格式,WZY服务返回数组,而前端期望 {comments: [...]} |
| // 同时转换字段名以适配前端期望的格式 |
| const adaptedComments = Array.isArray(comments) ? comments.map(comment => ({ |
| ...comment, |
| user_name: comment.user_name || `用户${comment.user_id}`, // 如果没有用户名,使用用户ID生成 |
| create_time: comment.created_at // 将 created_at 映射为 create_time |
| })) : [] |
| return { comments: adaptedComments } |
| }, |
| // 上传帖子 |
| uploadPost: async (postData) => { |
| // 转换数据格式以适配 WZY 服务 |
| const payload = { |
| user_id: postData.user_id || 1, // 默认用户ID |
| title: postData.title, |
| content: postData.content, |
| type: postData.type || 'text', // 默认为文本类型 |
| media_urls: postData.media_files || [], |
| status: 'published' // 直接发布,不需要审核 |
| } |
| |
| const result = await request(`${WZY_BASE_URL}/posts`, { |
| method: 'POST', |
| body: JSON.stringify(payload) |
| }) |
| |
| // 注意:WZY 服务目前不支持标签功能,tags 会被忽略 |
| // 如果需要标签功能,需要额外的API调用或使用支持标签的服务 |
| |
| return result |
| } |
| } |
| |
| export default searchAPI |