r - TwitteR、ROAuth 和 Windows : register OK, 但证书验证失败

标签 r twitter twitter-oauth

我正在尝试使用 twitteR 获取大量 Twitter 用户的关注者数量。许多other questions发布的内容对我到目前为止非常有用,但据我所知,似乎没有一个与我的问题直接相关。

我可以将我的 OAuth 凭据注册到 twitter R session ,但随后我似乎根本无法执行任何操作,我只收到以下消息:

函数错误(类型、msg、asError = TRUE): SSL 证书问题,请验证 CA 证书是否正常。细节: 错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

当我在不使用 OAuth 的情况下使用 twitteR 功能时,它们可以正常工作,没有错误或警告,但我遇到了限制和 protected 帐户,我认为使用 OAuth 可以避免这种情况。

详细信息如下:

library(twitteR)
library(ROAuth)
library(RCurl)
#
# Here's how I register my credentials
#
requestURL <-  "https://api.twitter.com/oauth/request_token"
accessURL =    "https://api.twitter.com/oauth/access_token"
authURL =      "https://api.twitter.com/oauth/authorize"
consumerKey =   "------------"
consumerSecret = "-----------"
twitCred <- OAuthFactory$new(consumerKey=consumerKey,
                             consumerSecret=consumerSecret,
                             requestURL=requestURL,
                             accessURL=accessURL,
                             authURL=authURL)
download.file(url="http://curl.haxx.se/ca/cacert.pem",
              destfile="cacert.pem")
twitCred$handshake(cainfo="cacert.pem")
To enable the connection, please direct your web browser to: 
https://api.twitter.com/oauth/authorize?oauth_token=xxxx
When complete, record the PIN given to you and provide it here: xxxxxx
registerTwitterOAuth(twitCred)
[1] TRUE
# so the OAuth bit appears to be ok...
#
# save it for a future sessions...
save(list="twitCred", file="twitteR_credentials")
# works, in future I can just
load("twitteR_credentials")
registerTwitterOAuth(twitCred)
#
# try to get follower numbers, here's where it goes south
me <- getUser("Rbloggers")
me$followersCount
Error in function (type, msg, asError = TRUE)  :
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
#
# another method, same problem
getUser("Rbloggers")$followersCount
Error in function (type, msg, asError = TRUE)  : 
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
# 
# Here are the packages and versions I'm using
sessionInfo() 
R version 2.14.1 (2011-12-22)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252   
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ROAuth_0.9.2      digest_0.5.1      twitteR_0.99.19   rjson_0.2.6       RCurl_1.91-1.1   
 [6] bitops_1.0-4.1    igraph_0.5.5-4    topicmodels_0.1-4 tm_0.5-7          slam_0.1-23      
[11] modeltools_0.2-18 lasso2_1.2-12    

loaded via a namespace (and not attached):
[1] tools_2.14.1

注册凭据后如何才能使 twitteR 功能正常工作?

更新:尝试@Btibert3的建议会给出相同的错误:

> ## Authenticate with Twitter = this is an important peice of code
> registerTwitterOAuth(cred)
[1] TRUE
> ##########################################################################
> ## lets test out what our session limits look like
> ##########################################################################
> rate.limit <- getCurRateLimitInfo()
Error in function (type, msg, asError = TRUE)  : 
  SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

更新按照@flz的建议在各处添加cainfo="cacert.pem"已经解决了我的问题:

rate.limit <- getCurRateLimitInfo( cainfo="cacert.pem")
rate.limit
                             resource limit remaining               reset
1                  /lists/subscribers   180       180 2013-03-27 09:35:37
2                         /lists/list    15        15 2013-03-27 09:35:37
3                  /lists/memberships    15        15 2013-03-27 09:35:37
4                   /lists/ownerships    15        15 2013-03-27 09:35:37
5                /lists/subscriptions    15        15 2013-03-27 09:35:37
6                      /lists/members   180       180 2013-03-27 09:35:37
7             /lists/subscribers/show    15        15 2013-03-27 09:35:37
8                     /lists/statuses   180       180 2013-03-27 09:35:37
9                         /lists/show    15        15 2013-03-27 09:35:37
10                /lists/members/show    15        15 2013-03-27 09:35:37
11     /application/rate_limit_status   180       179 2013-03-27 09:35:37 (etc)

session 信息:

sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ROAuth_0.9.2   digest_0.6.3   twitteR_1.1.0  rjson_0.2.12   RCurl_1.95-4.1 bitops_1.0-5  

loaded via a namespace (and not attached):
[1] tools_2.15.3

最佳答案

我过去收到过您上面描述的错误,但这对我有用。

#=======================================================================================
## ON windows, we need to dowload the certificate for OAUTH
## NOTE:  you will need to setup an app on Twitter
## dev.twitter.com <- get your KEY/SECRET
#=======================================================================================


##########################################################################
## Load packages
##########################################################################

library(twitteR)
library(ROAuth)

## set the directory
setwd("~/your/directory/here")


## Windows users need to get this file
download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")



##########################################################################
## Authenticate with Twitter
##########################################################################

## authenticate with the API
## requires that you have registered an app
KEY <- "KEY"
SECRET <-"SECRET"


## create an object that will save the authenticated onbject -- we can for later sessions
## will need to navigate to website and type in data to generate the file
## NOTE:  Only need to do this part once!!!
cred <- OAuthFactory$new(consumerKey = KEY, 
    consumerSecret = SECRET,
    requestURL = "https://api.twitter.com/oauth/request_token", 
    accessURL = "https://api.twitter.com/oauth/access_token", 
    authURL = "https://api.twitter.com/oauth/authorize")
cred$handshake(cainfo="cacert.pem")


## load the cred object in later sessions and simply pass to the registerTwitterOAuth
## After this file is saved, you only need to load the cred object back into memory
save(cred, file="twitter authentication.Rdata")


## Authenticate with Twitter = this is an important peice of code
registerTwitterOAuth(cred)


##########################################################################
## lets test out what our session limits look like
##########################################################################
rate.limit <- getCurRateLimitInfo()

## If return 350, Authenticated session = more API calls allowed / hour
rate.limit$hourlyLimit
rate.limit$remainingHits
rate.limit$resetTime

关于r - TwitteR、ROAuth 和 Windows : register OK, 但证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916283/

相关文章:

css - Bookdown:如何更改章节标题的大小?

r - 使用 data.table 进行多个聚合步骤

ios - 遵循 Fabric 将 TwitterKit 集成到 iOS 项目中的说明是否安全?

android - 与服务提供商的通信失败 : Twitter

php - Twitter oauth2/invalidate_token 错误 "Unable to verify your credentials"、 "authenticity_token_error"

r - "Collapse"使用列名作为 ID 将多列分成两列

r - 忽略时间序列中指定点的计数重置

ssl - 使推文按钮在 Https 页面上工作

java - Twitter4j API 中的 DirectMessage 身份验证

oauth - 使用 Windows 服务或控制台应用程序获取 access_token。 Instagram API