名称: strava
描述: 使用 Strava API 加载和分析 Strava 活动、统计数据和锻炼记录
主页: https://developers.strava.com/
元数据: {"clawdbot":{"emoji":"🏃","requires":{"bins":["curl"],"env":["STRAVA_ACCESS_TOKEN"]},"primaryEnv":"STRAVA_ACCESS_TOKEN"}}
与 Strava 交互,以加载活动、分析锻炼并追踪健身数据。
http://localhost 用作回调地址)在浏览器中访问此 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。
添加到 ~/.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_token 和 refresh_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 — 收到的点赞数
如果达到速率限制,响应中将包含 X-RateLimit-* 头信息。
date -d @TIMESTAMP (Linux) 或 date -r TIMESTAMP (macOS)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"}'
X-RateLimit-Usage 头信息)。