4

我正在尝试使用 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.

我仔细检查了我的密钥和 URL,所以我很确定这不是错误的原因。

  1. 谁能告诉我我做错了什么?
  2. 有没有办法提取服务器请求和响应以进行错误分析?

谢谢,克里斯

4

1 回答 1

3

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

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

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

首先,您将您的消费者密钥和秘密发送给 XING,XING 将返回给您一个令牌。

然后与所有三个:

1)消费者密钥,2)消费者秘密和3)刚刚提供的令牌

你能访问 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用于该唯一密钥和秘密组合,即该用户......但是一旦你拥有它......你不需要继续请求它......你可以将它存储在你的 .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)

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

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

于 2013-01-18T12:14:10.113 回答