我在R中使用 twitteR 包根据其ID提取推文。 但是我无法在没有达到速率限制或错误404的情况下为多个推文ID执行此操作。 这是因为我一直使用 showStatus() - 一个推文ID。 我正在寻找类似于 getStatuses()的功能 - 多个推文ID /请求
是否有一种有效的方法来执行此操作。 我想在使用outh的15分钟窗口中只能发出60个请求。
那么,我该如何确保: - 1. 为单个请求检索多个推文ID,然后重复这些请求。 2. 正在检查费率限制。 3. 未找到推文的错误处理。
P.S:此活动不是基于用户的。
由于
答案 0 :(得分:3)
我最近遇到过同样的问题。要使用其API提供的lookup
方法批量检索推文Twitter recommends。这样,每个请求最多可以获得100条推文。
不幸的是,这还没有在twitteR
包中实现;所以我试图破解快速功能(通过重新使用twitteR
包中的大量代码)来使用该API方法:
lookupStatus <- function (ids, ...){
lapply(ids, twitteR:::check_id)
batches <- split(ids, ceiling(seq_along(ids)/100))
results <- lapply(batches, function(batch) {
params <- parseIDs(batch)
statuses <- twitteR:::twInterfaceObj$doAPICall(paste("statuses", "lookup",
sep = "/"),
params = params, ...)
twitteR:::import_statuses(statuses)
})
return(unlist(results))
}
parseIDs <- function(ids){
id_list <- list()
if (length(ids) > 0) {
id_list$id <- paste(ids, collapse = ",")
}
return(id_list)
}
确保ids
的向量属于character
类(否则ID非常大可能存在一些问题)。
使用这样的功能:
ids <- c("432656548536401920", "332526548546401821")
tweets <- lookupStatus(ids, retryOnRateLimit=100)
设置高retryOnRateLimit
可确保您收到所有推文,即使您的ID向量包含超过18,000个条目(100 IDs per request, 180 requests per 15-minute window)。
像往常一样,您可以将推文转换为twListToDF(tweets)
的数据框。