【问题标题】:How to retrieve multiple tweets from tweet_id using R如何使用 R 从 tweet_id 检索多条推文
【发布时间】:2014-10-30 17:55:50
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 我仍然对你想要什么感到困惑。但是,我一直在使用streamR。如果您使用filterStream,您可以在您指定的时间段内收集推文。如果需要,您可以指定位置。输入所有推文后,您可以使用parseTweets,它会为您提供一个数据框。您可以使用用户 ID 对数据进行子集化。大概,如果一个用户在一段时间内发了多次推文,那么你的数据框中就有了多条推文。

标签: r twitter


【解决方案1】:

我最近遇到了同样的问题。对于批量检索推文,Twitter recommends 使用其 API 提供的 lookup 方法。这样,每个请求最多可以获得 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) 将推文转换为数据框。

【讨论】:

  • 嗨,戴夫,感谢这个功能......它非常有用!
猜你喜欢
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2015-06-06
  • 2021-03-23
  • 1970-01-01
相关资源
最近更新 更多