如何使用 rtweet 包收集过去 7 天内的推文?

How can I collect tweets from within the last seven days using rtweet package?

我已经开始使用 rtweet 包,到目前为止,我的查询、语言和地理编码参数都取得了不错的结果。但是,我仍然不知道如何收集最近 7 天内的推特数据。

例如,在下一个代码块中,我想提取一些 7 天的数据,但我不确定收集的推文是从 2017-06-29 到 2017-06-05 还是从2017-06-22 至 2017-06-29:

流式传输所有提及 AMLO 或 lopezobrador 的推文 7 天

stream_tweets("AMLO,lopezobrador",
          timeout = 60*60*24*7,
          file_name = "tweetsaboutAMLO.json",
          parse = FALSE)

将数据作为整洁的 tbl 数据框读入

AMLO <- parse_stream("tweetsaboutAMLO.json")

你知道在使用 search_tweets() 或 stream_tweets() 函数时,rtweet 中是否有任何命令可以指定要使用的时间范围吗?

在过去的 7 天里,我已经找到了一个收集推文的寺院。但是,它效率不高。

rt_24 <- search_tweets("lang:es", 
                       geocode = mexico_coord, 
                       until="2018-06-24",
                       n = 100)

rt_25 <- search_tweets("lang:es",
                       geocode = mexico_coord,
                       until="2018-06-25",
                       n = 100)

rt_26 <- search_tweets("lang:es",
                       geocode = mexico_coord,
                       until="2018-06-26",
                       n = 100)

rt_27 <- search_tweets("lang:es",
                       geocode = mexico_coord,
                       until="2018-06-27",
                       n = 100)

然后,附加数据帧

rbind(rt_24,rt_25,rt_26,rt_27)

你知道有没有更高效的写法?也许将 max_id() 函数与 until 结合使用?

因此,要回答有关 gow 的问题以更有效地编写它,您可以尝试使用 for 循环或应用列表。这里我展示了for循环。

首先,创建一个包含您要呼叫的 4 个日期的列表。

fechas <- seq.Date(from = as.Date("2018-06-24"), to = as.Date("2018-06-27"), by =  1)

然后创建一个空的 data.frame 来存储您的推文。

df_tweets <- data.frame()

现在,循环您的列表并填充空的 data.frame。

for (i in seq_along(fechas)) {
 df_temp <-  search_tweets("lang:es",
                        geocode = mexico_coord,
                        until= fechas[i],
                        n = 100)
 df_tweets <- rbind(df_tweets, df_temp)
}

summary(df_tweets)

另一方面,以下解决方案可能更方便、更高效:

library(tidyverse)
f_tweets2 <- search_tweets("lang:es",
                         geocode = mexico_coord,
                         until= "2018-06-29", ## or latest date                            
                        n = 10000)
df_tweets2 %>% 
  group_by(as.Date(created_at)) %>%  ## Group (or set apart) the tweets by date of creation
  sample_n(100)   ## Obtain 100 random tweets for each group, in this case, for each date.