OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  strava:加载并分析 Strava 的活动、统计数据和锻炼情况

strava:加载并分析 Strava 的活动、统计数据和锻炼情况

 
  kubernetes ·  2026-02-05 10:16:53 · 3 次点击  · 0 条评论  

名称: strava
描述: 使用 Strava API 加载和分析 Strava 活动、统计数据和锻炼记录
主页: https://developers.strava.com/
元数据: {"clawdbot":{"emoji":"🏃","requires":{"bins":["curl"],"env":["STRAVA_ACCESS_TOKEN"]},"primaryEnv":"STRAVA_ACCESS_TOKEN"}}


Strava 技能

与 Strava 交互,以加载活动、分析锻炼并追踪健身数据。

设置

1. 创建 Strava API 应用

  1. 访问 https://www.strava.com/settings/api
  2. 创建一个应用(测试时可将 http://localhost 用作回调地址)
  3. 记下你的 客户端 ID客户端密钥

2. 获取初始 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_tokenrefresh_token

3. 配置凭据

添加到 ~/.clawdbot/clawdbot.json

{
  "skills": {
    "entries": {
      "strava": {
        "enabled": true,
        "env": {
          "STRAVA_ACCESS_TOKEN": "你的访问令牌",
          "STRAVA_REFRESH_TOKEN": "你的刷新令牌",
          "STRAVA_CLIENT_ID": "你的客户端ID",
          "STRAVA_CLIENT_SECRET": "你的客户端密钥"
        }
      }
    }
  }
}

或者使用环境变量:

export STRAVA_ACCESS_TOKEN="你的访问令牌"
export STRAVA_REFRESH_TOKEN="你的刷新令牌"
export STRAVA_CLIENT_ID="你的客户端ID"
export STRAVA_CLIENT_SECRET="你的客户端密钥"

使用

列出近期活动

获取最近 30 项活动:

curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?per_page=30"

获取最近 10 项活动:

curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?per_page=10"

按日期筛选活动

获取特定日期之后的活动(Unix 时间戳):

# 获取 2024年1月1日之后的活动
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?after=1704067200"

获取指定日期范围内的活动:

# 获取 2024年1月1日至1月31日之间的活动
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?after=1704067200&before=1706745600"

获取活动详情

获取特定活动的完整详情(替换 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"

分页

浏览不同页面:

# 第 1 页(默认)
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?page=1&per_page=30"

# 第 2 页
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?page=2&per_page=30"

令牌刷新

访问令牌每 6 小时过期。使用辅助脚本刷新:

bash {baseDir}/scripts/refresh_token.sh

或手动刷新:

curl -s -X POST https://www.strava.com/oauth/token \
  -d client_id="${STRAVA_CLIENT_ID}" \
  -d client_secret="${STRAVA_CLIENT_SECRET}" \
  -d grant_type=refresh_token \
  -d refresh_token="${STRAVA_REFRESH_TOKEN}"

响应中包含新的 access_tokenrefresh_token。请使用这两个新令牌更新你的配置。

常见数据字段

活动对象包含以下字段:
- name — 活动标题
- distance — 距离(米)
- moving_time — 运动时间(秒)
- elapsed_time — 总耗时(秒)
- total_elevation_gain — 海拔爬升(米)
- type — 活动类型(跑步、骑行、游泳等)
- sport_type — 具体运动类型
- start_date — 开始时间(ISO 8601 格式)
- average_speed — 平均速度(米/秒)
- max_speed — 最大速度(米/秒)
- average_heartrate — 平均心率(如有)
- max_heartrate — 最大心率(如有)
- kudos_count — 收到的点赞数

速率限制

  • 15 分钟内 200 次请求
  • 每天 2,000 次请求

如果达到速率限制,响应中将包含 X-RateLimit-* 头信息。

实用技巧

  • 转换 Unix 时间戳:date -d @TIMESTAMP (Linux) 或 date -r TIMESTAMP (macOS)
  • 米转公里:除以 1000
  • 米转英里:除以 1609.34
  • 米/秒转公里/小时:乘以 3.6
  • 米/秒转英里/小时:乘以 2.237
  • 秒转小时:除以 3600
  • 解析 JSON:如果可用,使用 jq;或使用 grep/sed 进行基本提取

示例

获取上周的跑步活动及其距离:

LAST_WEEK=$(date -d '7 days ago' +%s 2>/dev/null || date -v-7d +%s)
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?after=${LAST_WEEK}&per_page=50" \
  | grep -E '"name"|"distance"|"type"'

计算近期活动的总距离:

curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
  "https://www.strava.com/api/v3/athlete/activities?per_page=10" \
  | grep -o '"distance":[0-9.]*' | cut -d: -f2 | awk '{sum+=$1} END {print sum/1000 " km"}'

错误处理

  • 401 未授权错误:访问令牌已过期。请运行令牌刷新命令。
  • 速率限制错误:等待限制窗口重置(检查 X-RateLimit-Usage 头信息)。
3 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor