我无法从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或密钥?我已经登录,所以不明白为什么我无法访问自己的信息。请指教
答案 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; }
}