在 Twitter 句柄向量上循环 search_tweets 函数(rtweet 包)时出现 R 身份验证错误
R Authentication error when looping search_tweets function (rtweet package) over vector of Twitter handles
我创建了一个遍历 Twitter 句柄向量的循环,并使用 rtweet
包中的 search_tweets
函数从它们收集推文。
正在下载最新版本的 rtweet
## install devtools package if it's not already
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
}
## install dev version of rtweet from github
devtools::install_github("mkearney/rtweet")
library(rtweet)
创建令牌
## autheticate via web browser
token=create_token(
app = "My_app",
consumer_key = "My Consumer Key",
consumer_secret =
"My Secret Code",set_renv = FALSE)
这是我的 Twitter 句柄,存储在向量中
twitter_handles=c("@realDonaldTrump","@HillaryClinton","@MittRomney")
然后我遍历这些句柄,并将每个句柄的结果存储为唯一的数据帧
#Loop through the twitter handles & store the results as individual dataframes
for(handle in twitter_handles) {
result <- search_tweets(handle, n = 3500 , include_rts = FALSE,retryonratelimit = TRUE)
if(length(result) != 0){
result$`Twitter Handle` <- handle
result$Source <- "Search"
df_name <- paste(tolower(substring(handle, 2)),"_search")
if(exists(df_name)) {
assign(df_name, unique(rbind(get(df_name), result)))
} else {
assign(df_name, result)
}
}
}
但是当我这样做时,我收到一条错误消息
Warning: 32 - Could not authenticate you.
Error in vector("list", ntimes) : invalid 'length' argument
不过我不认为这是身份验证问题,因为当我尝试随机 keyword/hashtag 时,我得到了结果
data <- search_tweets("#rstats", n = 10, include_rts = FALSE,token = token)
我的循环工作正常,但最近它开始抛出错误。
关于为什么会发生这种情况以及是否有解决办法的任何想法?
非常感谢您的帮助!
第一个错误:
"Warning: 32 - Could not authenticate you. Error in vector("list",
ntimes) : invalid 'length' argument"
一般来说,如果您使用的是 rtweet 的旧版本,就会遇到此错误。
为什么?
当 Twitter 更新他们的 API 时,他们有时会更改 API GET 请求的结构。 rtweet 每次发生这种情况时都必须重新格式化他们的请求,要求您使用最新版本的 rtweet 来保持与 Twitter API 的连接。有趣的是,一些 API 调用仍然会成功,因为对 Twitter API 的那些调用没有变化。
您遇到的错误被引用@TwitterCommunity.com。
获取最新版本rtweet
要获取最新版本的 rtweet,您可以使用 devtools 软件包(安装后)。
## install devtools package if it's not already
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
}
## install dev version of rtweet from github
devtools::install_github("mkearney/rtweet")
## load rtweet package
library(rtweet)
相关错误
Error in vector("list", n.times) : invalid 'length' argument In
addition: Warning message: rate limit exceeded.
查找跟踪错误的好地方是 github 上 rtweet 包的 Github 包跟踪列表。
令牌安全
这是一个旁注,但我的感觉是您可能还想在没有 API 密钥的情况下共享您的完整代码。您可以在 R 中使用 ~/.Reviron
.
执行此操作
# Reload .Renviron
# Do this to capture any edits to Environment variables
readRenviron("~/.Renviron")
# Generate a token
token <- create_token(
app = "rtweet_51672443_test_application",
consumer_key = Sys.getenv("RTWEET_CONSUMER_KEY"),
consumer_secret = Sys.getenv("RTWEET_CONSUMER_SECRET_KEY")
)
其中 .Renviron 包含:
RTWEET_CONSUMER_KEY="<Insert Consumer Key obtained from Titter>"
RTWEET_CONSUMER_SECRET_KEY="<Insert Consumer Secret Key obtained from Titter>"
希望以上内容能帮助您指明正确的方向。
我创建了一个遍历 Twitter 句柄向量的循环,并使用 rtweet
包中的 search_tweets
函数从它们收集推文。
正在下载最新版本的 rtweet
## install devtools package if it's not already
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
}
## install dev version of rtweet from github
devtools::install_github("mkearney/rtweet")
library(rtweet)
创建令牌
## autheticate via web browser
token=create_token(
app = "My_app",
consumer_key = "My Consumer Key",
consumer_secret =
"My Secret Code",set_renv = FALSE)
这是我的 Twitter 句柄,存储在向量中
twitter_handles=c("@realDonaldTrump","@HillaryClinton","@MittRomney")
然后我遍历这些句柄,并将每个句柄的结果存储为唯一的数据帧
#Loop through the twitter handles & store the results as individual dataframes
for(handle in twitter_handles) {
result <- search_tweets(handle, n = 3500 , include_rts = FALSE,retryonratelimit = TRUE)
if(length(result) != 0){
result$`Twitter Handle` <- handle
result$Source <- "Search"
df_name <- paste(tolower(substring(handle, 2)),"_search")
if(exists(df_name)) {
assign(df_name, unique(rbind(get(df_name), result)))
} else {
assign(df_name, result)
}
}
}
但是当我这样做时,我收到一条错误消息
Warning: 32 - Could not authenticate you. Error in vector("list", ntimes) : invalid 'length' argument
不过我不认为这是身份验证问题,因为当我尝试随机 keyword/hashtag 时,我得到了结果
data <- search_tweets("#rstats", n = 10, include_rts = FALSE,token = token)
我的循环工作正常,但最近它开始抛出错误。 关于为什么会发生这种情况以及是否有解决办法的任何想法?
非常感谢您的帮助!
第一个错误:
"Warning: 32 - Could not authenticate you. Error in vector("list", ntimes) : invalid 'length' argument"
一般来说,如果您使用的是 rtweet 的旧版本,就会遇到此错误。
为什么?
当 Twitter 更新他们的 API 时,他们有时会更改 API GET 请求的结构。 rtweet 每次发生这种情况时都必须重新格式化他们的请求,要求您使用最新版本的 rtweet 来保持与 Twitter API 的连接。有趣的是,一些 API 调用仍然会成功,因为对 Twitter API 的那些调用没有变化。
您遇到的错误被引用@TwitterCommunity.com。
获取最新版本rtweet
要获取最新版本的 rtweet,您可以使用 devtools 软件包(安装后)。
## install devtools package if it's not already
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
}
## install dev version of rtweet from github
devtools::install_github("mkearney/rtweet")
## load rtweet package
library(rtweet)
相关错误
Error in vector("list", n.times) : invalid 'length' argument In addition: Warning message: rate limit exceeded.
查找跟踪错误的好地方是 github 上 rtweet 包的 Github 包跟踪列表。
令牌安全
这是一个旁注,但我的感觉是您可能还想在没有 API 密钥的情况下共享您的完整代码。您可以在 R 中使用 ~/.Reviron
.
# Reload .Renviron
# Do this to capture any edits to Environment variables
readRenviron("~/.Renviron")
# Generate a token
token <- create_token(
app = "rtweet_51672443_test_application",
consumer_key = Sys.getenv("RTWEET_CONSUMER_KEY"),
consumer_secret = Sys.getenv("RTWEET_CONSUMER_SECRET_KEY")
)
其中 .Renviron 包含:
RTWEET_CONSUMER_KEY="<Insert Consumer Key obtained from Titter>"
RTWEET_CONSUMER_SECRET_KEY="<Insert Consumer Secret Key obtained from Titter>"
希望以上内容能帮助您指明正确的方向。