我使用R中的twitteR包来提取基于ids的tweet。但是,对于多个tweet I,我无法做到这一点,而不触及速率限制或错误404。这是因为我使用的是showStatus() --一次只使用一个tweet id。我正在寻找一个类似于getStatuses()的函数-多个tweet id/
是执行此操作的一种有效方法。--我想,在15分钟的窗口中,使用只能发出60个请求。
那么,我如何确保:- 1.检索单个请求的多个tweet is,然后重复这些请求。2。速率限制正在检查中。3。未找到tweet的错误处理。。
P.S :这个活动不是基于用户的。
谢谢
发布于 2014-10-30 09:55:50
我最近也遇到过同样的问题。为了批量检索tweet,推特建议使用其API提供的lookup
-method。这样,每个请求最多可以获得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
可以确保您获得所有的tweet,即使您的if向量有超过18,000个条目(每个请求100个ID,每15分钟窗口180个请求)。
与往常一样,您可以使用twListToDF(tweets)
将tweet转换为数据框架。
https://stackoverflow.com/questions/26645672
复制相似问题