【问题标题】:R - Twitter - OAuth - REST API - User cannot be authenticatedR - Twitter - OAuth - REST API - 用户无法通过身份验证
【发布时间】:2017-10-12 22:20:27
【问题描述】:

我有以前用于验证我的代码,但现在不再有效。我错过了什么改变了吗?

我的认证方式如下

library(httr)
options(httr_oauth_cache=TRUE)

myKey = "x123y456z789"
mySecret = "a987b654c321"
myToken = "abc123456def" 
tokenSecret = "zxy987654"

myapp = oauth_app("Twitter", key=myKey, secret=mySecret)
sig = sign_oauth1.0(myapp, token=myToken, token_secret=tokenSecret)

我构建了一个简单的搜索查询来测试

BASE = "https://api.twitter.com/1.1/search/tweets.json?"
query = "q=13+Reasons+Why"
url = paste( BASE, query, sep="")

这使得最终的基本 URL 没有日期、时间、推文限制等......

url="https://api.twitter.com/1.1/search/tweets.json?q=13+Reasons+Why"

GET(url, sig)

返回

Response [https://api.twitter.com/1.1/search/tweets.json?q=13+Reasons+Why]
Date: 2017-05-13 19:42
Status: 401
Content-Type: application/json; charset=utf-8
Size: 64 B

将其包装在内容中

content( GET(url, sig) )

告诉我

$errors[[1]]$message
[1] "Could not authenticate you."

我检查了我所有的令牌、秘密等是否正确,而且查询非常简单,我不确定哪里可能出错。

【问题讨论】:

    标签: r twitter oauth


    【解决方案1】:

    这似乎工作正常:

    library(httr)
    myKey = "x123y456z789:"
    mySecret = "a987b654c321"
    myapp = oauth_app("Twitter", key=myKey, secret=mySecret)
    token = oauth1.0_token(app = myapp, endpoint = oauth_endpoints("twitter"))
    BASE = "https://api.twitter.com/1.1/search/tweets.json"
    q = "13 Reasons why"
    res <- GET(BASE, config(token = token), query = list(q=q))
    t(sapply(content(res)$statuses[1:3], "[", c("created_at", "text")))
    #      created_at                       text                                                                                                             
    # [1,] "Sat May 13 19:58:03 +0000 2017" "Stuck on episode 11 of 13 reasons why I don't have the heart to finish it it's so sad <f0><U+009F><" [truncated]
    # [2,] "Sat May 13 19:58:01 +0000 2017" "RT @SelenaGomezNews: New photo of Selena Gomez on set of '13 Reasons Why'. "             
    # [3,] "Sat May 13 19:58:00 +0000 2017" "RT @lockscreenbabes: <U+2615> katherine langford and dylan minette (13 reasons why) lockscreen <U+2" [truncated]
    

    【讨论】:

    • 您好。谢谢。我仍然遇到问题。在执行“ token = oauth1.0_token( app=myapp, endpoint=oauth_endpoints("twitter") ) 后立即出现未经授权的 HTTP 401 错误。这可能是因为 myapp 中的“Twitter”来自必须命名的东西这样我就不见了?
    • @Jibril 我的猜测是:myKey 和 mySecret 是错误的。 (那是我得到错误的时候。)
    • 谢谢。我也是这么想的,但我已经检查了30次。我已经从 Twitter 上重新复制了它们,但仍然没有。使用 twitteR 包一次,我确实设法获得了直接连接,但我宁愿继续使用 httr 和我目前的做法,因为我的大部分解析代码已经为此设计了。
    • 再次感谢,我想你已经搞定了。虽然我认为我没有更改任何内容,但现在重新生成密钥会产生一个新错误供我诊断 - “ token = oauth1.0_token(app = myapp, endpoint = oauth_endpoints("twitter")) 加载名称空间(名称)中的错误:没有名为“openssl”的包,但这是进步,因为它不再只是拒绝身份验证!
    • 有趣的是,我让你的代码工作了。只是想添加最后的评论并接受。我的回调 URL 已更改为我的大学 URL,与我的应用程序的“网站”相匹配。这似乎成功了。我不确定为什么使用我在各处看到的推荐的 127.0.0.1:1410 有效,但它没有。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2016-04-16
    • 2017-07-11
    • 2014-04-14
    • 1970-01-01
    • 2016-04-30
    • 2011-06-18
    相关资源
    最近更新 更多