本文档描述了如何使用会员周度总结API调用AI生成会员最近一周的数据变化总结和专业建议。
会员周度总结API提供了调用AI分析会员最近一周(或指定时间段)的数据变化,并生成专业教练建议的功能。这些数据包括体重变化、训练记录、阶段进度等,AI会根据会员的健身目的提供针对性的分析和建议。
调用AI生成指定会员的周度数据变化总结和专业建议。
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| member_id | Integer | 否 | 会员ID,如果不提供则使用当前登录用户关联的会员 |
| start_date | String | 否 | 开始日期,格式为'YYYY-MM-DD',默认为一周前 |
| end_date | String | 否 | 结束日期,格式为'YYYY-MM-DD',默认为今天 |
{
"error": 0,
"data": {
"basic_info": {
"member_name": "张三",
"trainer_name": "李四",
"gym_location": "北京市朝阳区",
"report_date": "2025-03-30",
"user_gym_target": "减脂塑形"
},
"weekly_data": {
"assessments_count": 1,
"weight_records_count": 5,
"has_previous_assessment": true,
"weight_change": -0.5,
"body_fat_percentage_change": -0.3,
"skeletal_muscle_change": 0.2,
"body_fat_mass_change": -0.4,
"basal_metabolism_change": 10,
"waist_circumference_change": -1.0,
"chest_circumference_change": 0.5,
"hip_circumference_change": -0.5,
"weight_trend": [
{"date": "2025-03-24", "weight": 75.5},
{"date": "2025-03-25", "weight": 75.3},
{"date": "2025-03-27", "weight": 75.2},
{"date": "2025-03-29", "weight": 75.0}
],
"latest_assessment": {
"date": "2025-03-28",
"weight": 75.0,
"body_fat_percentage": 18.5,
"skeletal_muscle": 35.2,
"body_fat_mass": 13.9,
"basal_metabolism": 1750,
"waist_circumference": 82.0,
"chest_circumference": 95.5,
"hip_circumference": 98.0
},
"workout_sessions": 3,
"completed_sessions": 3,
"workout_hours": 4.5,
"workout_completion_rate": 100,
"workout_details": [
{
"date": "2025-03-24",
"time": "18:30",
"duration": 1.5,
"completed": true,
"workout_name": "力量训练",
"pre_exercise_status": "良好",
"after_exercise_status": "适当"
},
{
"date": "2025-03-26",
"time": "19:00",
"duration": 1.5,
"completed": true,
"workout_name": "有氧训练",
"pre_exercise_status": "良好",
"after_exercise_status": "适当"
},
{
"date": "2025-03-28",
"time": "18:00",
"duration": 1.5,
"completed": true,
"workout_name": "全身训练",
"pre_exercise_status": "良好",
"after_exercise_status": "适当"
}
],
"has_current_stage": true,
"post_workout_activities": 2,
"post_workout_completion_rate": 66.7,
"stage_progress": 35.0,
"stage_info": {
"name": "减脂阶段",
"start_date": "2025-03-01",
"end_date": "2025-04-30",
"target_weight_loss": "目标减重5kg,降低体脂率3%",
"nutrition_requirements": "控制碳水摄入,增加蛋白质摄入"
}
},
"ai_summary": {
"full_summary": "本周总结:\n\n1. 体重和体成分变化分析:\n本周您的体重从75.5kg下降到75.0kg,减少了0.5kg,这是一个良好的进展。体脂率下降了0.3%,同时骨骼肌增加了0.2kg,这表明您正在有效地减少脂肪同时保持肌肉量,这对于您的减脂塑形目标非常有利。基础代谢提高了10kcal,虽然增幅不大,但方向是正确的。\n\n2. 训练计划执行情况评估:\n本周您完成了全部3次训练课程,总训练时长达4.5小时,完成率100%,表现出色。您的课前状态均为"良好",课后状态均为"适当",说明训练强度适中,既有挑战性又不会过度疲劳。此外,您还完成了2次课后训练,完成率为66.7%,这也是不错的表现,但还有提升空间。\n\n3. 针对性的改进建议:\n- 继续保持良好的训练频率和强度,特别是力量训练部分,这有助于提高基础代谢和保持肌肉量。\n- 建议将课后训练完成率提高到80%以上,这将帮助您更快达成减脂目标。\n- 腰围已经减少了1.0cm,这是个好兆头,说明内脏脂肪在减少。\n\n4. 下周训练和饮食建议:\n- 训练方面:建议下周增加1次HIIT训练,以进一步促进脂肪燃烧。\n- 饮食方面:继续控制碳水摄入,特别是晚餐后避免碳水摄入。增加蛋白质摄入,每天至少1.6g/kg体重,以保护肌肉组织。\n- 建议增加每日步数,目标达到8000-10000步,这将有助于增加非运动性热量消耗。\n\n总体来看,您本周的进展符合减脂塑形的目标,如果能保持这样的节奏,预计在阶段结束时可以达成目标减重5kg的计划。"
}
}
}
| 错误码 | 描述 |
|---|---|
| 400 | 请求参数错误,如当前用户未关联会员 |
| 404 | 未找到指定会员 |
| 500 | 服务器内部错误 |
POST /gym/member/weekly_summary
Content-Type: application/json
{
"member_id": 123,
"start_date": "2025-03-23",
"end_date": "2025-03-30"
}
调用此API后,服务器会分析指定时间段内会员的各项数据变化,并使用AI生成专业的教练建议。这些数据包括:
AI会根据会员的健身目的(如减脂、增肌、塑形等)提供针对性的分析和建议,帮助会员更好地了解自己的训练效果和改进方向。
// 使用fetch API获取会员周度总结
async function getWeeklySummary(memberId, startDate, endDate, accessToken) {
try {
const response = await fetch('/gym/member/weekly_summary', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + accessToken
},
body: JSON.stringify({
member_id: memberId,
start_date: startDate,
end_date: endDate
})
});
const data = await response.json();
if (data.error === 0) {
console.log('获取会员周度总结成功');
// 显示基本信息
document.getElementById('member-name').textContent = data.data.basic_info.member_name;
document.getElementById('gym-target').textContent = data.data.basic_info.user_gym_target;
// 显示体重变化趋势
renderWeightChart(data.data.weekly_data.weight_trend);
// 显示训练记录
renderWorkoutList(data.data.weekly_data.workout_details);
// 显示AI总结
document.getElementById('ai-summary').innerHTML = data.data.ai_summary.full_summary.replace(/\n/g, '
');
return data.data;
} else {
console.error('获取失败:', data.message);
throw new Error(data.message);
}
} catch (error) {
console.error('请求出错:', error);
throw error;
}
}
// 调用示例
getWeeklySummary(
123, // 会员ID
'2025-03-23', // 开始日期
'2025-03-30', // 结束日期
'your-access-token' // 访问令牌
).then(data => {
console.log('周度总结数据:', data);
}).catch(error => {
console.error('获取周度总结失败:', error);
});
import requests
import json
from datetime import datetime, timedelta
def get_weekly_summary(member_id=None, start_date=None, end_date=None, access_token=None):
"""
获取会员周度总结
Args:
member_id: 会员ID,如果不提供则使用当前登录用户关联的会员
start_date: 开始日期,格式为'YYYY-MM-DD',默认为一周前
end_date: 结束日期,格式为'YYYY-MM-DD',默认为今天
access_token: 访问令牌
"""
url = 'http://your-domain.com/gym/member/weekly_summary'
# 如果没有提供日期,使用默认值
if not end_date:
end_date = datetime.now().strftime('%Y-%m-%d')
if not start_date:
start_date = (datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d')
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {access_token}'
}
data = {}
if member_id:
data['member_id'] = member_id
data['start_date'] = start_date
data['end_date'] = end_date
response = requests.post(url, json=data, headers=headers)
if response.status_code == 200:
result = response.json()
if result['error'] == 0:
print(f"获取会员周度总结成功")
return result['data']
else:
print(f"获取失败: {result['message']}")
raise Exception(result['message'])
else:
print(f"请求失败,状态码: {response.status_code}")
raise Exception(f"请求失败,状态码: {response.status_code}")
# 调用示例
try:
summary_data = get_weekly_summary(
member_id=123,
start_date='2025-03-23',
end_date='2025-03-30',
access_token='your-access-token'
)
# 打印基本信息
print(f"会员: {summary_data['basic_info']['member_name']}")
print(f"健身目的: {summary_data['basic_info']['user_gym_target']}")
# 打印体重变化
print(f"本周体重变化: {summary_data['weekly_data']['weight_change']}kg")
# 打印训练情况
print(f"本周训练课程: {summary_data['weekly_data']['workout_sessions']}次")
print(f"完成率: {summary_data['weekly_data']['workout_completion_rate']}%")
# 打印AI总结
print("\nAI总结:")
print(summary_data['ai_summary']['full_summary'])
except Exception as e:
print(f"获取周度总结失败: {str(e)}")