使用R连接到Strava

使用R连接到Strava,r,api,R,Api,整天都在搞这个。我只是想从Strava中提取数据,在R中进行操作,但我想不出来。我不是程序员,但我曾经连接到github文件,但事情并没有按照我的方式发展 这是一个基本的错误,还是我遗漏了一些我还不明白的更深层次的原则 这是我尝试运行代码时得到的结果: x <- pullStravaData(); > x <Token> <oauth_endpoint> request: https://www.strav

整天都在搞这个。我只是想从Strava中提取数据,在R中进行操作,但我想不出来。我不是程序员,但我曾经连接到github文件,但事情并没有按照我的方式发展

这是一个基本的错误,还是我遗漏了一些我还不明白的更深层次的原则

这是我尝试运行代码时得到的结果:

    x <- pullStravaData();
    > x
    <Token>
    <oauth_endpoint>
     request:       https://www.strava.com/oauth/authorize
     authorize:     http://localhost:1410
     access:        https://www.strava.com/oauth/token
     client_id:     3979
     response_type: code
    <oauth_app> strava
      key:    XX # I hid this, not sure if it matters
      secret: <hidden>
    <credentials> message, errors
x
请求:https://www.strava.com/oauth/authorize
授权:http://localhost:1410
访问:https://www.strava.com/oauth/token
客户编号:3979
响应类型:代码
斯特拉瓦
钥匙:XX#我把这个藏起来了,不知道它是否重要
秘密:
消息、错误
这是我的代码:

pullStravaData <- function() {

    # because I think this is important
      library(httr);

      # not sure if this is relevant
      responseType = "code";
      clientId = 3979;

      # create app                
      clientSecret = trust_that_i_entered_this;
      accessToken = and_this_wrapped_in_quotes;
      myapp <- oauth_app("strava", accessToken, clientSecret);

      # get oauth credentials
      request <- "https://www.strava.com/oauth/authorize";
      authorize <- "http://localhost:1410";
      access <- "https://www.strava.com/oauth/token";
      strava_token <- oauth2.0_token(
          oauth_endpoint(request, authorize, access),
          myapp);

      data <- stravaPost(strava_token, clientId, clientSecret);

    }

    stravaPost <- function(token, clientId, clientSecret) {

      # I saw this happen somewhere else, but I'm pretty sure my script doesn't even get here
      stoken = config(token=token);
      req <- GET(sprintf("https://www.strava.com/api/v3/activities/%s",
          clientId), stoken, client_id = clientId, client_secret = clientSecret, code = token);
      stop_for_status(req); # not sure what this does
      content(req); # not sure what this does
    }
pullStravaData顺序:

  • httr是R http请求库,因此,通过库(httr)包含它是很重要的,是的
  • stop_for_status如果请求的HTTP状态令人担忧,则会停止后续代码行的运行—例如,404(未找到任何内容)或403(未授权)
  • content从HTTP响应中提取实际内容,并提供该内容,而不是返回整个响应
  • 在PullStravata函数中没有使用任何类型的显式或隐式return()。结果是它实际上并没有返回“数据”。尝试转向:

     data <- stravaPost(strava_token, clientId, clientSecret);
    
    看看会发生什么。顺便说一句,在这里分号是不必要的


    我强烈建议,如果你要用R手动发出这些请求,你应该了解语言是如何运行的,它的规则是什么。听说不错。

    我不知道你不需要半决赛。我对该语言有很好的理解,只是不了解api或http相关函数。在添加“return(data)”之后,我仍然得到完全相同的响应,我认为显式返回变量不是问题所在。我认为存在授权问题,但我不确定原因(错误401)。此外,datacamp似乎没有涵盖任何如此复杂的内容,strava文档中也没有使用R.Fair。缺少我自己的API密钥,我唯一能建议的是,您深入了解httr的一些细节,而不是大量复制代码,然后看看它的OAuth设置是如何工作的-这些都很好。谢谢,我感谢您的帮助
     data <- stravaPost(strava_token, clientId, clientSecret);
     return(data)
    
     stravaPost(strava_token, clientId, clientSecret);