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')
我的目标是为任何 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')