正如标题所说,我正在尝试连接到reddit API,我在我的个人资料上创建了一个应用程序(名为注释提取器),并复制粘贴公钥和密钥,并使用http://localhost:1410/作为重定向URI和URL。该应用程序是一个脚本,但我尝试了网络应用程序,但结果相同。
我正在使用的代码只是从Hadleys httr演示中复制粘贴,但我交换了我自己的密钥(所有内容都使用最新版本的httr,1.3.1)。
library(httr)
# 1. Find OAuth settings for reddit:
# https://github.com/reddit/reddit/wiki/OAuth2
reddit <- oauth_endpoint(
authorize = "https://www.reddit.com/api/v1/authorize",
access = "https://www.reddit.com/api/v1/access_token"
)
# 2. Register an application at https://www.reddit.com/prefs/apps
app <- oauth_app("comment extractor", "rrG5wfgHkm5Kvw", "[secret key]")
# 3b. If get 429 too many requests, the default user_agent is overloaded.
# If you have an application on Reddit then you can pass that using:
token <- oauth2.0_token(
reddit, app,
scope = c("read", "modposts"),
use_basic_auth = TRUE,
config_init = user_agent("reddit_username")
)
网页浏览器打开,我被要求允许或拒绝令牌,一切似乎都很好,但是这个消息总是失败
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort
Authentication complete.
Error in oauth2.0_access_token(endpoint, app, code = code, user_params =
user_params, :
Unauthorized (HTTP 401). Failed to get an access token.
我不确定如何处理用户代理,我注意到应用程序要求开发人员名称,所以我尝试了一些随机文本并使用我的reddit用户名,无论哪种方式,我总是得到401错误,这似乎意思是错误的键,但肯定不是。
任何帮助都会非常感激,当我在最基本的步骤停下来并且不知道接下来该做什么时,我有点不知所措。
答案 0 :(得分:0)
我有完全相同的问题! 我还没有找到解决方案,但我想我已经找到了问题所在。
错误发生在oauth2.0_ access _token函数中,而不是在oauth2.0_token函数中。 在oauth2.0_token函数中,我们设置了&#34; use_basic_auth&#34;为真。但是在oauth2.0_ access _token函数中默认为&#34; use_basic_auth&#34;设置为FALSE。
由于令牌功能似乎调用了acces_token函数,我不知道如何更改默认值...但我希望我的见解会让我们更近一步(如果你找到了最终的解决方案,请你分享一下吗?和我在一起?)
答案 1 :(得分:0)
我找到了解决问题的方法! 通过使init.oauth2.0()传递use_basic_auth,httr github页面的拉请求#485解决了我们的问题。 因此,您可以通过添加以下行来安装他的httr版本:
#install.packages("devtools")
library(devtools)
devtools::install_github("r-lib/httr#485")
library(httr)
以下是我的完整代码(不要用来定义密钥和秘密):
#install.packages("httr")
#install.packages("devtools")
library(devtools)
devtools::install_github("r-lib/httr#485")
library(httr)
# 1. Find OAuth settings for reddit:
# https://github.com/reddit/reddit/wiki/OAuth2
endpoint <- oauth_endpoint(
authorize = "https://www.reddit.com/api/v1/authorize",
access = "https://www.reddit.com/api/v1/access_token"
)
# 2. Register an application at https://www.reddit.com/prefs/apps
app <- oauth_app("Test_App", key, secret)
# 3b. If get 429 too many requests, the default user_agent is overloaded.
# If you have an application on Reddit then you can pass that using:
token <- oauth2.0_token(
endpoint = endpoint,
app=app,
scope = c("read", "modposts"),
use_basic_auth = TRUE,
# cache = F,
config_init = user_agent("Testing Oauth with httr")
)
#trying to make a call
#Important! Make sure to put oauth.reddit.com instad of reddit.com!
request_url <- "https://oauth.reddit.com/r/AskReddit/comments/7az0np/what_is_the_most_pointless_piece_of_information/.json"
response <- GET(request_url,
user_agent("Testing Oauth with httr"),
config(token = token)
)
content(response, "text")