TwitteR, ROAuth и Windows: зарегистрируйтесь в порядке, но проверка сертификата не выполнена

Я пытаюсь получить количество последователей большого числа пользователей Twitter с помощью twitteR . Многие из других опубликованных вопросов были очень полезны для меня до сих пор, но никто, кажется, не имеет прямого отношения к моей проблеме, насколько я могу судить.

Я могу зарегистрировать свои учетные данные OAuth на сеансе twitter R, но тогда я не могу ничего сделать, я просто получаю это сообщение:

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

Когда я использую функции twitteR без использования OAuth, они работают нормально, без ошибок и предупреждений, но я сталкиваюсь с ограничениями и защищенными учетными записями, которые, как я думал, я мог бы избежать с помощью 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 после регистрации моих учетных данных?

UPDATE : предложение Trying @ 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 

UPDATE после предложения @ 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) 

Информация о сеансе:

 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 

    Пытаться:

     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 

    Каждое действие get / update требует добавления cainfo="cacert.pem" . Это раздражает.

    Я получил ошибку, описанную выше в прошлом, но это сработало для меня.

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

    ОБНОВЛЕНИЕ Это временное решение, см. Ответ @ flz и мой отредактированный вопрос для окончательного решения.

    Поскольку я поставил вопрос, я использовал этот простой цикл в качестве обходного пути (правильные решения по-прежнему приветствуются!). Это займет много времени, но, по крайней мере, это даст мне данные. Возможно, кто-то еще найдет это полезным.

     # 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 

    Кажется, что проблема с ROauth 0.9.1, если вы используете эту версию, вы должны взглянуть на это сообщение разработчиком twitteR (это сработало для меня): http://lists.hexdump.org/pipermail/ twitter-users-hexdump.org/2012-March/000075.html

    Другие ответы сосредоточены на download.file() для обновления файла cacert. Это не должно иметь значения, но вы можете попробовать загрузить последнюю версию Curl и использовать ее для обновления файла cacert, например …

     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) 

    Я не уверен, что я просто не вижу этого правильно, но я думаю, что это приведет к тому, что ваш файл будет сохранен в cacert.perm, но вы скажете рукопожатие посмотреть в cacert.pem?

     > download.file (url = "http://curl.haxx.se/ca/cacert.pem",
     > destfile = "cacert.perm")
     > twitCred $ рукопожатие (cainfo = "cacert.pem")
    

    Вы пробовали использовать полный путь к cacert.pem в вашем рукопожатии? Следующее решение проблемы для меня в Ubuntu:

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

    Эта ошибка довольно устойчива даже на моем компьютере, но использование cainfo = “cacert.pm” во всех функциях устраняет эту проблему или обходит ее. Не слишком уверен

    наконец, я получил решение, попробуйте этот метод

     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) 

    Я думаю, что самый быстрый способ:

    0) Настройте свои ключи api на Api.Twitter
    1) Использовать hadley httr Twitter oauth
    2) Спасите вас twitter_token в RDS
    3) Загрузка на сервер или куда угодно, где вы хотели бы использовать
    4) Просто используйте команду GET с этим токеном
    5) Вы можете получить 300 000 исков в час на законных основаниях из Twitter

    Давайте будем гением компьютера.