我正在尝试使用 ROAuth (v0.9.2) 对 XING API (api.xing.com) 进行身份验证。

library(package="RCurl")
library(package="ROAuth")

site <- "https://api.xing.com"
requestTokenPath <- "/v1/request_token"
accessTokenPath <- "/v1/access_token"
authorizePath <- "/v1/authorize"

consumerKey <- "***********"    # blank key for posting
consumerSecret <- "********"    # blank key for posting

requestURL <- paste(site, requestTokenPath, sep="")
accessURL <- paste(site, accessTokenPath, sep="")
authURL <- paste(site, authorizePath, sep="")

credentials <- OAuthFactory$new(consumerKey=consumerKey,
    consumerSecret=consumerSecret,
    requestURL=requestURL,
    accessURL=accessURL,
    authURL=authURL,
    needsVerifier=TRUE)

credentials$handshake(ssl.verifypeer=FALSE)  # skip ssl verification for testing, this is passed through to RCurl

输出:
Error in credentials$handshake(ssl.verifypeer = FALSE) :
  Invalid response from site, please check your consumerKey and consumerSecret and try again.

我仔细检查了我的 key 和 URL,所以我很确定这不是错误的原因。
  • 谁能告诉我我做错了什么?
  • 有没有办法提取服务器请求和响应进行错误分析?

  • 谢谢,
    克里斯

    最佳答案

    我建议使用 Hadley Wickham 的 httr 包,因为我发现它在处理 API 时特别有用。并且不要忘记仔细阅读所有相关文档...

    看起来 XING 使用 OAuth v1,因此请查看相关的 httr 文档

    我不确定你是否已经知道这一点......但它有点像一个两阶段的过程......

    首先,您将您的消费者 key 和 secret 发送给 XING,它将返回给您一个 token 。

    然后与所有三个:

    1)消费者 key ,
    2) 消费者 secret 和
    3)刚刚提供的 token

    你能访问 XING 设置的所有 API 调用吗……你可能需要 XML 来有效地解释响应。

    不确定这是否有效,但大致如下:

    require(httr)
    xing.app <- oauth_app("xing",key="xxxxxxxxxx", secret="xxxxxxxxxxxxxxx")
    xing.urls <- oauth_endpoint(NULL, "authorize", "access_token",base_url = "https://api.xing.com/v1/")
    xing.token <- oauth1.0_token(xing.urls, xing.app)
    xing.token
    
    xing.token 中的那个 token 用于那个唯一的 key 和 secret 组合,即那个用户......但是一旦你拥有它......你不需要继续请求它......你可以将它存储在你的 .Rprofile 文件中或某物...然后将其作为 GET 或 POST 命令中的一个选项。
    user.signature <- sign_oauth1.0(xing.app, token = token.string.from.xing.token, token_secret = token.secret.from.xing.token)
    
    # so I think as an example you can have this...
    id <- "yyyyyyy"
    GET(url= paste0("https://api.xing.com/v1/users/",id), config=user.signature)
    

    希望有所帮助....代码中可能存在一些错误,因为我没有您的消费者 key 或 secret ,因此未经测试。我还没有完全阅读文档,但我认为它不会太远......请随时进行更正......当你实际测试它时......

    出于好奇……您使用 API 做什么?

    关于r - 如何在 XING 中使用 OAuth 和 R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14198411/

    10-12 16:30