API 1.1使用r请求Twitter承载令牌

时间:2013-12-03 15:56:41

标签: r twitter oauth twitter-oauth

我搜索了这个论坛并尝试了一些似乎相关的东西,但没有成功。如果有人能发现我所缺少的东西,我将非常感激。

我正在尝试使用仅在https://dev.twitter.com/docs/auth/application-only-auth中解释的仅应用程序授权来获取持有人令牌,以便我可以获得关注者/ ID。

我使用rstudio与我的消费者密钥&以Base64编码形式保密。

library(httr)
POST(url="https://api.twitter.com/oauth2/token", config=add_headers(
c('Host="api.twitter.com"',
'User-Agent="NameOfMyApp"',
'Authorization="Basic MyKeyandSecretBase64Encoded"',
'Content-Type="application/x-www-form-urlencoded;charset=UTF-8"',
'Content-Length="29"',
'Accept-Encoding="gzip"')), body="grant_type=client_credentials")

作为回应,我收到:

Response [https://api.twitter.com/oauth2/token]
Status: 403
Content-type: application/json; charset=utf-8
{"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable to verify your credentials"}]}

我尝试重置我的凭据,但没有任何区别。

2 个答案:

答案 0 :(得分:1)

我已经晚了几个星期了,但对于像我这样偶然发现这个页面的人来说,这里有一些适用于我的代码,返回一个不记名代币:

POST(url="https://api.twitter.com/oauth2/token",
config=add_headers(c("Host: api.twitter.com",
"User-Agent: [app name]",
"Authorization: Basic [base64encoded]",
"Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
"Content-Length: 29",
"Accept-Encoding: gzip")),
body="grant_type=client_credentials")

一旦你有了持有人令牌,就把它放在GET的标题中,如下所示:

GET("https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=justinbieber&count=5000",
config=add_headers(c("Host: api.twitter.com",
"User-Agent: [app name]",
"Authorization: Bearer [bearer token]",
"Accept-Encoding: gzip")))

答案 1 :(得分:0)

迟到的回复,但现有的回答并不适合我。因此,这是一个修改GET请求的解决方案。

add_headers()使用命名向量。这需要带连字符的标题名称用反引号(``)括起来。因此,POST()来电应该是:

response <- POST(url = "https://api.twitter.com/oauth2/token",
                 config = add_headers(.headers = c(Host = "api.twitter.com",
                                                   `User-Agent` = "NameOfMyApp",
                                                   Authorization = "Basic [base64encoded]",
                                                   `Content-Type` = "application/x-www-form-urlencoded;charset=UTF-8",
                                                   `Content-Length` = "29",
                                                   `Accept-Encoding` = "gzip")),
                 body = "grant_type=client_credentials")

在成功的响应中,可以使用以下方式访问应用程序访问令牌:

bearer_token <- jsonlite::fromJSON(rawToChar(response$content))$access_token

然后,您可以使用GET请求进行验证,例如:

GET("https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=justinbieber&count=100",
    config = add_headers(.headers = c(Host = "api.twitter.com",
                                      `User-Agent` = "NameOfMyApp",
                                      Authorization = paste("Bearer", bearer_token),
                                     `Accept-Encoding` = "gzip")))