如何使用R从tweet_id中检索多个推文

时间:2014-10-30 05:24:17

标签: r twitter

我在R中使用 twitteR 包根据其ID提取推文。 但是我无法在没有达到速率限制或错误404的情况下为多个推文ID执行此操作。 这是因为我一直使用 showStatus() - 一个推文ID。 我正在寻找类似于 getStatuses()的功能 - 多个推文ID /请求

是否有一种有效的方法来执行此操作。 我想在使用outh的15分钟窗口中只能发出60个请求。

那么,我该如何确保: - 1. 为单个请求检索多个推文ID,然后重复这些请求。 2. 正在检查费率限制。 3. 未找到推文的错误处理。

P.S:此活动不是基于用户的。

由于

1 个答案:

答案 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)的数据框。