R - 使用 Twitter API 从帐户中获取每条推文

R - Use Twitter API to get every tweet from an account

我的目标是为任何 Twitter 帐户获取每条推文。我为这个例子选择了纽约时报。

下面的代码有效,但它只提取了最后 100 条推文。 max_results 不允许输入超过 100 的值。

下面的代码几乎完全可以复制粘贴,您必须拥有自己的不记名令牌。

我如何扩展它以提供来自帐户的每条推文?

一个想法是我可以在创建帐户后的每一天循环它,但如果有更快的方法,这似乎很乏味。

# NYT Example --------------------------------------------------------------------

library(httr)
library(jsonlite)
library(tidyverse)

bearer_token <- "insert your bearer token here"
headers <- c(`Authorization` = sprintf('Bearer %s', bearer_token))

params <- list(`user.fields` = 'description')
handle <- 'nytimes'
url_handle <- sprintf('https://api.twitter.com/2/users/by?usernames=%s', handle)

response <- httr::GET(url = url_handle,
                      httr::add_headers(.headers = headers),
                      query = params)
json_data <- fromJSON(httr::content(response, as = "text"), flatten = TRUE)
json_data %>% 
  as_tibble()

NYT_ID <- json_data$data$id


url_handle <- paste0("https://api.twitter.com/2/users/", NYT_ID, "/tweets")
params <- list(`tweet.fields` = 'id,text,author_id,created_at,attachments,public_metrics',
               `max_results` = '100')

response <- httr::GET(url = url_handle,
                      httr::add_headers(.headers = headers),
                      query = params)
json_data <- fromJSON(httr::content(response, as = "text"), flatten = TRUE)

NYT_tweets <- json_data$data %>% 
  as_tibble() %>% 
  select(-id, -author_id, -9)
NYT_tweets

对于后来发现此问题的任何人,我找到了适合我的解决方案。

使用 start_time 和 end_time 的参数,您可以明确推文之间的日期。例如,我能够提取 11 月的所有推文,然后将它们绑定到 12 月的推文,等等。有时我必须拉取两次推文(3 月下半月,3 月下半月)才能获得所有推文,但它有效为此。

params <- list(`tweet.fields` = 'id,text,author_id,created_at,attachments,public_metrics',
               `max_results` = '100',
               `start_time` = '2021-11-01T00:00:01.000Z',
               `end_time` = '2021-11-30T23:58:21.000Z')