如何在R中使用oauth2令牌从web服务器检索数据?

如何在R中使用oauth2令牌从web服务器检索数据?,r,api,R,Api,我已成功地从oauth2.0请求接收到访问令牌,以便可以开始从服务器获取一些数据。然而,每次尝试我都会遇到错误403。API对我来说是非常新的,我只是使用R的入门级,所以我无法找出我的请求有什么问题。我目前正在使用crul包,但我也尝试使用httr包发出请求,但如果不遇到403错误,我无法通过任何操作。我有一个闪亮的应用程序,最终我希望能够使用从另一个实际存储数据的应用程序导入的数据进行刷新,但我想先尝试将数据本地拉到我的控制台,这样我就可以理解这样做的基本过程。我将发布我目前的一些尝试 (x

我已成功地从oauth2.0请求接收到访问令牌,以便可以开始从服务器获取一些数据。然而,每次尝试我都会遇到错误403。API对我来说是非常新的,我只是使用R的入门级,所以我无法找出我的请求有什么问题。我目前正在使用crul包,但我也尝试使用httr包发出请求,但如果不遇到403错误,我无法通过任何操作。我有一个闪亮的应用程序,最终我希望能够使用从另一个实际存储数据的应用程序导入的数据进行刷新,但我想先尝试将数据本地拉到我的控制台,这样我就可以理解这样做的基本过程。我将发布我目前的一些尝试

(x <- HttpClient$new(
url = 'https://us.castoredc.com',
opts = list( exceptions = FALSE),
headers = list())
)
res.token <- x$post('oauth/token',
body = list(client_id = "{id}",
client_secret = "{secret}",
grant_type = 'client_credentials'))

importantStuff <- jsonlite::fromJSON(res$parse("UTF-8"))

token <- paste("Bearer", importantStuff$access_token)

因此,经过一些调查,结果表明,您首先必须请求在您的用户名下为每个Castor研究获取另一个id。我将发布一些最终有效的示例代码

req.studyinfo <- httr::GET(url = "us.castoredc.com/api/study"
,httr::add_headers(Authorization = token))
json <- httr::content(req.studyinfo,as = "text")
studies <- fromJSON(json)
然后,这将为您提供Castor中的研究列表,您可以获得您关心的端点ID。它将是一个列表,其中包含包含此信息的数据框。 您可以对文档中发布的任何端点使用相同的格式来检索数据。谢谢你的观察!我将把这个留在这里,以防任何人被雇佣来开发Castor EDC中使用的数据。他们的文档对我来说是模糊的,所以也许它会在将来帮助别人。 下一步的示例:

req.studydata <- httr::GET("us.castoredc.com/api/study/{study id obtained 
from previous step}/data-point- 
collection/study",,httr::add_headers(Authorization = 
token))
json.data <- httr::content(req.studydata,as = "text")
data <- fromJSON(json.data)

因此,经过一些调查,结果表明,您首先必须请求在您的用户名下为每个Castor研究获取另一个id。我将发布一些最终有效的示例代码

req.studyinfo <- httr::GET(url = "us.castoredc.com/api/study"
,httr::add_headers(Authorization = token))
json <- httr::content(req.studyinfo,as = "text")
studies <- fromJSON(json)
然后,这将为您提供Castor中的研究列表,您可以获得您关心的端点ID。它将是一个列表,其中包含包含此信息的数据框。 您可以对文档中发布的任何端点使用相同的格式来检索数据。谢谢你的观察!我将把这个留在这里,以防任何人被雇佣来开发Castor EDC中使用的数据。他们的文档对我来说是模糊的,所以也许它会在将来帮助别人。 下一步的示例:

req.studydata <- httr::GET("us.castoredc.com/api/study/{study id obtained 
from previous step}/data-point- 
collection/study",,httr::add_headers(Authorization = 
token))
json.data <- httr::content(req.studydata,as = "text")
data <- fromJSON(json.data)

我是Castor EDC的首席执行官,虽然在这里看到Castor EDC的问题很酷,但我为你在试图解决这个问题上浪费的时间道歉。我们的支持团队是否无法提供更多帮助

不管怎么说,我实际上在R中使用了很多API,如果您需要更多帮助,我们也有一位出色的R工程师

考虑到您的答案,是的,您总是需要一个研究ID才能使用API做任何有趣的事情。我们的R API包装器可以让您的生活更加轻松,您可以在这里找到:

因此,你将:

remotes::install_github("castoredc/castoRedc")
library(castoRedc)
castor_api <- CastorData$new(key = Sys.getenv("CASTOR_KEY"), 
                             secret = Sys.getenv("CASTOR_SECRET"), 
                             base_url = "https://data.castoredc.com")
example_study_id <- studies[["study_id"]][1]
fields <- castor_api$getFields(example_study_id)
等等


希望这能让你在未来的生活更轻松

我是Castor EDC的首席执行官,虽然在这里看到Castor EDC的问题很酷,但我为你在试图解决这个问题上浪费的时间道歉。我们的支持团队是否无法提供更多帮助

不管怎么说,我实际上在R中使用了很多API,如果您需要更多帮助,我们也有一位出色的R工程师

考虑到您的答案,是的,您总是需要一个研究ID才能使用API做任何有趣的事情。我们的R API包装器可以让您的生活更加轻松,您可以在这里找到:

因此,你将:

remotes::install_github("castoredc/castoRedc")
library(castoRedc)
castor_api <- CastorData$new(key = Sys.getenv("CASTOR_KEY"), 
                             secret = Sys.getenv("CASTOR_SECRET"), 
                             base_url = "https://data.castoredc.com")
example_study_id <- studies[["study_id"]][1]
fields <- castor_api$getFields(example_study_id)
等等


希望这能让你在未来的生活更轻松

这对我有效,我删除了Sys.getenv部分


这对我有效,我删除了Sys.getenv部分


有关于这个API的文档吗?每个API都可以自由地以不同的方式处理身份验证。如果没有一些已知的工作示例或文档,就很难提供帮助。他们有任何人都可以访问的API文档。看起来你调用路由/api/study的地方可能你只应该在他们用于服务器的文档网站的标题中包含你的承载令牌,但你似乎正在使用。你确定它们是一样的吗?支持团队告诉我,你的基本url取决于你的家庭服务器。所以他们让我把它改成我们的。有关于这个API的文档吗?每个API都可以自由地以不同的方式处理身份验证。如果没有一些已知的工作示例或文档,就很难提供帮助。他们有任何人都可以访问的API文档。看起来你调用路由/api/study的地方可能你只应该在他们用于服务器的文档网站的标题中包含你的承载令牌,但你似乎正在使用。你确定它们是一样的吗?支持团队告诉我你的基本url依赖于
在家庭服务器上安装ds。所以他们让我把它改成我们的。但是上面你说你在/api/study端点得到了403。不是这样吗?当/api/study端点一直在工作时,您从何处获得不同端点的403?我不知道你的第一个请求在这里有什么不同。我的解释是,额外的正文内容和标题是如何阻止我访问的。当我只使用带有授权头的令牌时,我可以得到一个代码200。然而,我不确定httr包是否有一些微妙的东西也有助于这一点。我附加了一个链接,我发现了一个twitter的例子,我基本上是复制和调整的。但是上面你说你在/api/study端点得到了403。不是这样吗?当/api/study端点一直在工作时,您从何处获得不同端点的403?我不知道你的第一个请求在这里有什么不同。我的解释是,额外的正文内容和标题是如何阻止我访问的。当我只使用带有授权头的令牌时,我可以得到一个代码200。然而,我不确定httr包是否有一些微妙的东西也有助于这一点。我附加了一个链接,我发现了一个twitter的例子,我基本上是复制和调整的。你的支持团队实际上很有帮助。我只是对API很陌生。我将下载它并试一试。非常感谢。你的支持团队实际上很有帮助。我只是对API很陌生。我将下载它并试一试。非常感谢。castoRedc包确实非常快速和简单,但我试图编写自己的请求代码以供学习,并且事实上,在使用该包时,计算字段和复选框都只为我导出缺少的值。我让他们的支持团队知道了,他们说这是一个他们将来可能会修复的错误。castoRedc软件包确实非常快速和简单,但我试图编写自己的请求代码以供学习,并且事实上,在使用该软件包时,计算字段和复选框都只为我导出缺少的值。我让他们的支持团队知道了,他们说这是一个他们将来可能会修复的bug。