TwitteR, ROAuth y Windows: regístrese bien, pero la verificación del certificado falló

Estoy tratando de obtener la cantidad de seguidores de una gran cantidad de usuarios de Twitter con twitteR . Muchas de las otras preguntas publicadas han sido muy útiles para llegar hasta aquí, pero ninguna parece ser directamente relevante para mi problema, hasta donde puedo ver.

Puedo registrar mis credenciales de OAuth en una sesión de Twitter R, pero parece que no puedo hacer nada. Acabo de recibir este mensaje:

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 fail

Cuando uso las funciones de twitteR sin usar OAuth, funcionan bien, sin errores ni advertencias, pero me topan con límites y cuentas protegidas, lo que pensé que podría evitar con OAuth.

Aquí están los detalles:

 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 

¿Cómo puedo twitteR funciones de twitteR después de registrar mis credenciales?

ACTUALIZACIÓN : Probar la sugerencia de @Btibert3 da el mismo error:

 > ## 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 

ACTUALIZAR siguiendo la sugerencia de @ flz para agregar cainfo="cacert.pem" todas partes ha solucionado mi problema:

 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) 

Información de la sesión:

 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 

    Tratar:

     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 getUser("Rbloggers",cainfo="cacert.pem")$followersCount [1] 2752 

    Cada acción get / update necesita un cainfo="cacert.pem" adjuntar detrás. Eso molesta

    He recibido el error que describiste anteriormente en el pasado, pero esto funcionó para mí.

     #======================================================================================= ## 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 

    ACTUALIZACIÓN Esta fue una solución provisional, vea la respuesta de @fl y mi pregunta editada para la solución final.

    Desde que publiqué la pregunta, he estado utilizando este ciclo simple como una solución (¡las soluciones adecuadas aún son bienvenidas!). Va a llevar mucho tiempo, pero al menos me dará los datos. Quizás alguien más lo encuentre útil también.

     # load library library(twitteR) # # Search Twitter for your term s < - searchTwitter('#rstats', n=1500) # convert search results to a data frame df <- do.call("rbind", lapply(s, as.data.frame)) # extract the usernames users <- unique(df$screenName) users <- sapply(users, as.character) # make a data frame for the loop to work with users.df <- data.frame(users = users, followers = "", stringsAsFactors = FALSE) # # loop to populate users$followers with follower # count obtained from Twitter API for (i in 1:nrow(users.df)) { # tell the loop to skip a user if their account is protected # or some other error occurs result <- try(getUser(users.df$users[i])$followersCount, silent = TRUE); if(class(result) == "try-error") next; # get the number of followers for each user users.df$followers[i] <- getUser(users.df$users[i])$followersCount # tell the loop to pause for 60 s between iterations to # avoid exceeding the Twitter API request limit print('Sleeping for 60 seconds...') Sys.sleep(60); } # # Now inspect users.df to see the follower data 

    Parece que hay un problema con ROauth 0.9.1. Si utiliza esa versión, debe consultar esta publicación del desarrollador de twitteR (me ha funcionado): http://lists.hexdump.org/pipermail/ twitter-users-hexdump.org/2012-March/000075.html

    Las otras respuestas se centran en download.file() para actualizar un archivo cacert. No debería marcar la diferencia, pero podría tratar de descargar el último binario de Curl y usarlo para actualizar el archivo cacert de modo que …

     url < - "http://curl.askapache.com/download/curl-7.23.1-win64-ssl-sspi.zip" tmp <- tempfile( fileext = ".zip" ) download.file(url,tmp) unzip(tmp, exdir = tempdir()) system( paste0( tempdir() , "/curl http://curl.haxx.se/ca/cacert.pem -o " , tempdir() , "/cacert.pem" ) ) # You can use this freshly downloaded cacert file and you can also set ssl.verifypeer = FALSE twitCred$handshake( cainfo = paste0( tempdir() , "/cacert.pem" ) , ssl.verifypeer = FALSE ) registerTwitterOAuth(Cred) 

    No estoy seguro de si no estoy viendo esto bien, pero estoy pensando que podría causar un problema que tu archivo se guarde en cacert.perm pero dices al handshake que mire en cacert.pem?

     > download.file (url = "http://curl.haxx.se/ca/cacert.pem",
     > destfile = "cacert.perm")
     > twitCred $ handshake (cainfo = "cacert.pem")
    

    ¿Has intentado utilizar el camino completo al cacert.pem en tu apretón de manos? Lo siguiente me solucionó el problema en Ubuntu:

    twitCred$handshake(cainfo="/etc/ssl/certs/cacert.pem")

    Este error es bastante persistente incluso en mi pc, pero el uso de cainfo = “cacert.pm” en todas las funciones elimina este problema o lo soluciona. No estoy muy seguro

    finalmente recibí la solución, por favor prueba este método

     library(devtools) install_github("twitteR", username="geoffjentry") library(twitteR) api_key = "aaa" api_secret = "bbb" access_token = "ccc" access_token_secret = "ddd" setup_twitter_oauth(api_key,api_secret,access_token,access_token_secret) 

    Creo que la manera más rápida:

    0) Configura tus teclas api en Api.Twitter
    1) Usar hadley httr Twitter oauth
    2) Te guardo twitter_token para RDS
    3) Subir al servidor o en cualquier lugar donde le gustaría usar
    4) Simplemente use el comando GET con este token
    5) Puedes obtener 300 000 ids por hora legalmente desde Twitter