Strava API v3中访问令牌的问题获取所有运动员活动

时间:2018-10-18 18:33:37

标签: javascript node.js ajax strava

我无法从Strava的api文档中的网址访问所有运动员活动(我自己的活动)。

我能够获得自己的年初至今统计信息:

https://www.strava.com/api/v3/athletes/XXXXXXXX/stats?access_token=ACCESSTOKEN

我能够获取我的个人资料信息:

https://www.strava.com/api/v3/athlete?access_token=ACCESSTOKEN

但是当我尝试进行所有活动时:

https://www.strava.com/api/v3/athlete/activities?access_token=ACCESSTOKEN

我收到以下错误:

{
    "message": "Authorization Error",
    "errors": [
        {
            "resource": "AccessToken",
             "field": "activity:read_permission",
             "code": "missing"
        }
    ]
}

我是否需要在URL的某处包含我的客户ID或密钥?我已经登录,所以不明白为什么我无法访问自己的信息。请指教

3 个答案:

答案 0 :(得分:9)

2018年10月15日,Strava增强了authorization流程,引入了scopes的新列表。

您是否正在使用在https://www.strava.com/settings/api上找到的访问令牌?

此令牌具有scope:read,可能不足以完成您想要的操作(即您的活动是公开的还是私有的?)。

如果您需要具有不同范围的新令牌,则必须遵循以下steps

步骤1:将用户重定向到Strava的授权页面:

https://www.strava.com/oauth/authorize?
    client_id=YOUR_CLIENT_ID&
    redirect_uri=YOUR_CALLBACK_DOMAIN&
    response_type=code&
    scope=YOUR_SCOPE

第2步:从响应中读取code参数:

http://YOUR_CALLBACK_DOMAIN/?
    state=&
    code=AUTHORIZATION_CODE_FROM_STRAVA&
    scope=YOUR_SCOPE

第3步:使用包含授权码的POST来请求新的访问令牌;您会在JSON响应中找到新的access_token

https://www.strava.com/oauth/token?
    client_id=YOUR_CLIENT_ID&
    client_secret=YOUR_CLIENT_SECRET&
    code=AUTHORIZATION_CODE_FROM_STRAVA&
    grant_type=authorization_code

您可以在application page中找到客户端ID,客户端密钥和回调域。

您可以在此documentation中找到新范围的列表。

如果您是唯一使用您的应用程序的人,请列出提示:

  • 您可以使用浏览器并将http://localhost作为回调域来手动执行前两个步骤
  • 使用旧的scope:view_private,您可以获得Strava称为永远的令牌:您可以在2019年10月15日之前使用此令牌,而无需重复3个步骤
  • 在今天scope=read,activity:read_all,profile:read_all,read_all上,如果您要求进行详细的活动似乎无法获得短暂的令牌

答案 1 :(得分:2)

我没有足够的意见要发表,但是最近我确实做到了!

要使其正常工作,您必须在步骤1中设置scope=activity:read(而不是'scope=read')。

答案 2 :(得分:0)

Strava api 访问...这个简短的 YouTube 视频将引导您完成这些步骤。 https://www.youtube.com/watch?v=sgscChKfGyg 和这里是 github 上的文本文件,其中包含相应的链接。 https://github.com/franchyze923/Code_From_Tutorials/blob/master/Strava_Api/request_links.txt

/// get a new access token because it changes. Step 3 in the text file
        var value = new Dictionary<string, string>
         {
            { "client_id", "abc" },
            { "client_secret", "defg" },
            { "refresh_token", "highlmnop" },
            { "grant_type", "refresh_token" }
         };

        var content = new FormUrlEncodedContent(value);
        var result = await client.PostAsync("https://www.strava.com/oauth/token", content);
        string resultContent = await result.Content.ReadAsStringAsync();
        var stravaDetails = JsonConvert.DeserializeObject<StravaRoot>(resultContent);
        // end get new access token


 public class StravaRoot
    {
        public string token_type { get; set; }
        public string access_token { get; set; }
        public int expires_at { get; set; }
        public int expires_in { get; set; }
        public string refresh_token { get; set; }
    }