You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:35:51