
Python Stravalib 包完整详解功能安装语法8大案例错误处理stravalib是Python官方生态中唯一专门对接 Strava 运动平台 API 的第三方库用于读取、分析、操作 Strava 上的骑行、跑步、游泳等运动数据无需手动拼接 HTTP 请求直接用 Python 代码即可自动化处理运动数据。本文会从基础到实战完整覆盖核心功能、安装、认证、语法参数、8个真实可用案例、常见报错与避坑指南。一、stravalib 核心功能Strava 是全球最大的骑行/跑步运动社交平台stravalib封装了其V3版本API支持用户信息获取读取个人资料、体重、身高、运动偏好活动数据获取所有运动记录距离、时间、配速、心率、功率、海拔、轨迹等分段Segment获取热门路段、个人最佳成绩、路段排名俱乐部获取俱乐部信息、成员列表、俱乐部活动上传/修改活动上传 GPX/FIT/TCX 文件、修改活动名称/描述关注/粉丝获取关注列表、粉丝列表心率/功率区间读取设备采集的专业运动指标批量数据导出导出为 CSV/Excel/GeoJSON 做数据分析适用场景运动数据分析、个人训练报告、批量导出轨迹、自动化运动周报、骑行/跑步科研数据处理。二、环境安装1. 安装命令pipinstallstravalib2. 依赖说明Python 3.7 支持自动依赖requests网络请求、pytz时区、arrow时间处理3. 前置必备Strava 开发者账号必须使用 stravalib 必须先在 Strava 开发者平台创建应用获取client_id / client_secret / 访问令牌打开https://www.strava.com/settings/api登录后创建应用随便填写名称、网站回调地址填http://localhost记录Client IDClient Secret生成访问令牌短期测试用直接在页面点击Your Access Token三、基础语法 核心参数1. 认证连接两种方式方式1短期令牌快速测试fromstravalibimportClient# 初始化客户端clientClient(access_token你的短期访问令牌)方式2OAuth 认证长期使用推荐fromstravalibimportClient clientClient()# 第一步获取授权URLurlclient.authorization_url(client_id你的ID,redirect_urihttp://localhost,scope[read,activity:read_all,activity:write]# 权限)print(打开链接授权,url)# 第二步复制回调后的 codecodeinput(输入授权code)# 第三步获取令牌token_responseclient.exchange_code_for_token(client_id你的ID,client_secret你的密钥,codecode)access_tokentoken_response[access_token]refresh_tokentoken_response[refresh_token]2. 核心权限 scope必看不配置权限会直接报错常用权限read读取基本信息activity:read读取公开活动activity:read_all读取所有活动公开私有activity:write上传/修改活动profile:read_all读取完整个人资料3. 通用方法与参数stravalib 方法命名非常直观参数统一规范方法作用常用参数get_athlete()获取当前用户信息无get_activities()获取活动列表before,after,limit,pageget_activity()获取单个活动详情id,include_all_effortsget_segment()获取路段信息idget_club()获取俱乐部信息idupload_activity()上传活动文件file_path,name,type,description四、8个实际应用案例可直接复制运行案例1获取个人 Strava 基本信息fromstravalibimportClient clientClient(access_token你的令牌)athleteclient.get_athlete()print(用户名,athlete.username)print(姓名,athlete.firstname,athlete.lastname)print(体重(kg),athlete.weight)print(城市,athlete.city)print(运动类型偏好,athlete.preferred_sport)案例2批量获取最近运动记录配速/距离/时间# 获取最近10条活动activitiesclient.get_activities(limit10)foractinactivities:print(f名称{act.name})print(f类型{act.type})# Ride / Run / Swimprint(f距离{act.distance:.2f}米)print(f运动时长{act.moving_time.seconds//60}分钟)print(f平均速度{act.average_speed:.2f}m/s)print(-*30)案例3筛选指定时间段的活动fromdatetimeimportdatetime,timedelta# 最近30天after_datedatetime.now()-timedelta(days30)actsclient.get_activities(afterafter_date,limit100)total_kmsum([act.distanceforactinacts])/1000print(f近30天总运动距离{total_km:.2f}km)print(f活动总数{len(list(acts))})案例4获取单个活动详细数据心率/海拔/轨迹activity_id1234567890# 替换成你的活动IDactclient.get_activity(activity_id,include_all_effortsTrue)print(总海拔爬升,act.total_elevation_gain,m)print(平均心率,act.average_heartrate,bpm)print(最大心率,act.max_heartrate,bpm)print(开始时间,act.start_date_local)print(设备,act.device_name)案例5导出活动轨迹为 GPX/坐标点actclient.get_activity(1234567890)streamclient.get_activity_streams(activity_id1234567890,types[latlng,time,altitude],# 经纬度、时间、海拔resolutionmedium)# 输出轨迹点iflatlnginstream:coordsstream[latlng].dataprint(f轨迹点数量{len(coords)})print(前3个坐标,coords[:3])案例6获取 Strava 俱乐部信息与成员club_id12345# 替换成俱乐部IDclubclient.get_club(club_id)print(俱乐部名称,club.name)print(成员数,club.member_count)print(简介,club.description)# 获取俱乐部前50名成员membersclient.get_club_members(club_id,limit50)forminmembers:print(m.firstname,m.lastname)案例7上传本地 GPX 文件到 Strava# 需要 activity:write 权限client.upload_activity(file_pathtest.gpx,name周末晨骑,activity_typeRide,description使用Python自动上传,privateFalse# 是否私有)print(上传成功)案例8生成个人运动统计报告总距离/时长fromdatetimeimportdatetime year2025actsclient.get_activities(limit200)ride_km0run_km0ride_time0forainacts:ifa.start_date.yearyear:ifa.typeRide:ride_kma.distance/1000ride_timea.moving_time.secondselifa.typeRun:run_kma.distance/1000print(f{year}年骑行{ride_km:.1f}km时长{ride_time//3600}小时)print(f{year}年跑步{run_km:.1f}km)五、常见错误与解决方案1. 401 Unauthorized 未授权原因令牌过期 / 权限不足解决重新生成短期令牌检查 scope 是否包含activity:read_all2. 403 Forbidden 禁止访问原因权限未申请解决授权时必须添加对应权限如上传需要activity:write3. 429 Too Many Requests 请求超限原因Strava 限制每15分钟 100次每24小时 1000次解决加延时time.sleep(1)批量获取时用limit减少请求4. AttributeError 找不到属性原因活动无该数据如无心率设备解决hract.average_heartrateifhasattr(act,average_heartrate)else05. 时间时区错乱原因Strava 默认 UTC 时间解决使用start_date_local本地时间六、使用注意事项必看避坑令牌有效期短期令牌仅有效几小时正式项目必须用 refresh_token 刷新隐私保护不要把 client_secret / access_token 上传到 GitHubAPI 限流不要写死循环疯狂请求会被暂时封禁数据单位距离米速度米/秒时间秒→ 记得自行转换为 km、km/h私有活动必须用activity:read_all才能读取轨迹流数据获取经纬度必须调用get_activity_streams()不是直接从 activity 获取总结stravalib是 Python 对接 Strava 最专业、最稳定的库支持读取/上传/分析全场景使用前必须创建 Strava 开发者应用并正确授权8个案例覆盖个人信息、活动列表、筛选、心率、轨迹、俱乐部、上传、统计报告高频错误授权、权限、限流、单位转换按文中方案可100%解决适合运动爱好者、数据分析师、科研人员做自动化运动数据处理《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。