Twitter
で多数のTwitterユーザーのフォロワー数を取得しようとしています。投稿された otherquestions の多くは、私をここまで到達させるのに非常に役立ちましたが、私が見る限り、私の問題に直接関連するものはないようです。
OAuth資格情報をTwitterRセッションに登録できますが、何もできないようです。次のメッセージが表示されます。
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
OAuth)を使用せずにTwitter
関数を使用すると、エラーや警告なしで正常に機能しますが、制限と保護されたアカウントにぶつかります。これは、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 [〜#〜]:@ 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 [〜#〜]どこにでもcainfo="cacert.pem"
を追加するという@flzの提案に従って、私の問題は修正されました。
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
すべての取得/更新アクションには、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
[〜#〜] update [〜#〜]これは暫定的な解決策でした。最終的な解決策については、@ 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
この権利が表示されていないかどうかはわかりませんが、ファイルがcacert.permに保存されるという問題が発生すると思いますが、ハンドシェイクでcacert.pemを確認するように指示されていますか?
> download.file(url = "http://curl.haxx.se/ca/cacert.pem"、 > destfile = "cacert.perm") > twitCred $ handshake(cainfo = "cacert.pem")
他の回答は、cacertファイルを更新するためのdownload.file()
に焦点を当てています。違いはないはずですが、最新の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)
ROauth 0.9.1に問題があるようです。そのバージョンを使用する場合は、Twitterの開発者によるこの投稿を参照してください(私にとってはうまくいきました): http://lists.hexdump。 org/pipermail/Twitter-users-hexdump.org/2012-March/000075.html
最終的に私は解決策を得ました、この方法を試してください
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.TwitterでAPIキーを設定します
1)hadley httr Twitteroauthを使用する
2)Twitter_tokenをRDSに保存します
3)サーバーまたは使用したい場所にアップロードします
4)このトークンでGETコマンドを使用するだけです
5)Twitterから合法的に1時間あたり30万のIDを取得できます
このエラーは私のPCでも非常に持続しますが、すべての関数でcainfo = "cacert.pm"を使用すると、この問題が解消されるか、回避されます。よくわからない
ハンドシェイクでcacert.pemへのフルパスを使用してみましたか?以下は、Ubuntuでの問題を解決しました。
twitCred$handshake(cainfo="/etc/ssl/certs/cacert.pem")