2013-12-03 5 views
0

Я искал этот форум и пробовал несколько вещей, которые казались релевантными, но безуспешно. Если кто-нибудь сможет понять, чего я пропущу, я был бы очень благодарен.API 1.1, запрашивающий токен на предъявителя, используя r

Я пытаюсь получить токен-носитель, используя только авторизацию приложения, как описано в https://dev.twitter.com/docs/auth/application-only-auth, так что я могу ПОЛУЧИТЬ следящие s/ids.

Я создал запрос в r, используя 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"}]} 

Я попытался сбросить свои полномочия, но это не имеет никакого значения.

+0

Не могли бы вы показать мне, где у вас есть секретный и секретный код в вашем запросе, чтобы получить токен-носитель с сервера аутентификации? Thanks, Mig –

ответ

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"))) 
+0

В чём проблема? Оба кода (ваш вопрос и ответ) кажутся одинаковыми ... – rsc

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"))) 
Смежные вопросы