Node.js调用Strava API获取运动员活动:分页参数使用异常排查
解决Strava API分页获取活动列表的问题
嘿,我一眼就看出问题出在哪啦!你对Strava API的分页参数理解有点小偏差:
per_page是每页返回的活动数量(最大支持200条),不是你要获取的总条数page是你要请求的页码
所以你设置 per_page=1&page=60,其实是在请求第60页的1条数据,这就是为什么只返回1条啦。如果想一次性获取60条活动,直接把per_page设为60(只要不超过200的上限),page设为1就行:
api.getRefreshToken("REFRESH_TOKEN").then(strava => { const headers = { 'Content-Type': 'application/json', 'Authorization': "Bearer " + strava.access_token }; fetch("https://www.strava.com/api/v3/athlete/activities?per_page=60&page=1", { method: 'GET', headers: headers }).then(responses => { if (!responses.ok) throw new Error(`API请求失败: ${responses.status}`); return responses.json(); }).then(strava0 => { console.log("Activities"); console.log(strava0); }).catch(err => { console.error("请求出错:", err); }); });
但如果你的总活动数超过60(或者超过200),就得循环请求不同页码来获取全部数据。这里给你一个用async/await优化的完整示例,自动分页直到没有更多数据:
async function fetchAllStravaActivities(refreshToken) { try { const strava = await api.getRefreshToken(refreshToken); const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${strava.access_token}` }; let allActivities = []; let currentPage = 1; let hasMore = true; while (hasMore) { const response = await fetch( `https://www.strava.com/api/v3/athlete/activities?per_page=200&page=${currentPage}`, { method: 'GET', headers } ); if (!response.ok) throw new Error(`请求第${currentPage}页失败: ${response.status}`); const pageActivities = await response.json(); if (pageActivities.length === 0) { hasMore = false; break; } allActivities = [...allActivities, ...pageActivities]; currentPage++; // 注意Strava API有速率限制,加个小延迟避免触发限流 await new Promise(resolve => setTimeout(resolve, 1000)); } console.log("所有活动:", allActivities); return allActivities; } catch (err) { console.error("获取活动列表出错:", err); throw err; } } // 调用函数 fetchAllStravaActivities("REFRESH_TOKEN");
几个关键点提醒你:
- 尽量用
per_page=200,减少请求次数,提高效率 - 一定要处理API请求的错误(比如HTTP状态码不是200的情况)
- 注意Strava的API速率限制(免费用户每15分钟最多100次请求,每天1000次),循环里加延迟更稳妥
- 如果只需要前60条,直接设置
per_page=60&page=1就够了,不用循环
内容的提问来源于stack exchange,提问作者Paul-Louis Renard
相关产品推荐
相关产品推荐

