Strava Skill 用于与 Strava 交互,加载活动、分析训练并跟踪健身数据。
用途 该技能通过 Strava API 获取并分析用户的 Strava 活动、统计和训练数据,适合需要查询运动记录、汇总距离或查看活动详情的场景。
主要能力
- 列出最近活动(可指定数量,如最近 30 条或 10 条)。
- 按日期筛选活动,支持使用 Unix 时间戳指定 after 和 before 参数。
- 获取指定活动的完整详情。
- 获取已认证运动员的个人资料。
- 获取指定运动员的统计数据。
- 支持分页浏览活动列表。
- 提供令牌刷新方式,访问令牌每 6 小时过期。
使用方式
- 创建 Strava API 应用:访问 https://www.strava.com/settings/api 创建应用(测试时回调地址可使用 http://localhost),记录 Client ID 和 Client Secret。
- 获取初始 OAuth 令牌:在浏览器中访问授权 URL(替换 CLIENT_ID):
https://www.strava.com/oauth/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=http://localhost&approval_prompt=force&scope=activity:read_all
授权后会重定向到 http://localhost/?code=AUTHORIZATION_CODE,然后用以下命令交换令牌:
curl -X POST https://www.strava.com/oauth/token
-d client_id=YOUR_CLIENT_ID
-d client_secret=YOUR_CLIENT_SECRET
-d code=AUTHORIZATION_CODE
-d grant_type=authorization_code 返回 access_token 和 refresh_token。 - 配置凭据:可添加到 ~/.thinkfleet/thinkfleet.json,或使用环境变量 STRAVA_ACCESS_TOKEN、STRAVA_REFRESH_TOKEN、STRAVA_CLIENT_ID、STRAVA_CLIENT_SECRET。
- 调用示例:
- 列出最近 30 条活动:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}"
"https://www.strava.com/api/v3/athlete/activities?per_page=30" - 按日期筛选(2024 年 1 月 1 日之后):
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}"
"https://www.strava.com/api/v3/athlete/activities?after=1704067200" - 获取活动详情(替换 ACTIVITY_ID):
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}"
"https://www.strava.com/api/v3/activities/ACTIVITY_ID" - 获取运动员资料:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}"
"https://www.strava.com/api/v3/athlete" - 获取运动员统计(替换 ATHLETE_ID):
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}"
"https://www.strava.com/api/v3/athletes/ATHLETE_ID/stats" - 分页:使用 page 和 per_page 参数。
- 令牌刷新:bash {baseDir}/scripts/refresh_token.sh,或手动 POST 到 https://www.strava.com/oauth/token,使用 grant_type=refresh_token 和 refresh_token。
常见数据字段 活动对象包含:name(活动标题)、distance(距离,米)、moving_time(移动时间,秒)、elapsed_time(总时间,秒)、total_elevation_gain(爬升,米)、type(活动类型,如 Run、Ride、Swim)、sport_type(具体运动类型)、start_date(开始时间,ISO 8601)、average_speed(平均速度,m/s)、max_speed(最大速度,m/s)、average_heartrate(平均心率,如有)、max_heartrate(最大心率,如有)、kudos_count(获得的 kudos 数)。
适用场景
- 查询和汇总跑步、骑行、游泳等运动记录。
- 按时间范围分析训练活动。
- 查看单次活动详情或运动员统计。
限制
- 速率限制:每 15 分钟 200 次请求,每天 2,000 次请求;触发限制时响应会包含 X-RateLimit-* 头。
- 访问令牌每 6 小时过期,需要刷新。
- 若返回 401 Unauthorized,表示访问令牌已过期,需运行令牌刷新命令。
- 若遇到速率限制错误,需等待限制窗口重置(可查看 X-RateLimit-Usage 头)。
提示
- 转换 Unix 时间戳:Linux 使用 date -d @TIMESTAMP,macOS 使用 date -r TIMESTAMP。
- 米转公里除以 1000,米转英里除以 1609.34。
- m/s 转 km/h 乘以 3.6,m/s 转 mph 乘以 2.237。
- 秒转小时除以 3600。
- 可用 jq 解析 JSON,或用 grep/sed 做基本提取。