1

我需要从 2013 年 4 月 28 日到今天从 Twitter 中提取带有“#bitcoin”的推文来进行情绪分析。

为此,我可以访问 Twitter 的 Premium API。

我正在使用提供功能 search_fullarchive 的 rtweet 包。

我的问题: 1. 如何确保从 2013 年 4 月 28 日到今天的时间间隔内每天下载 50,000 条推文?

  1. 我是否必须考虑“search_tweets”中的 retryonratelimit=T 参数?
  2. 必须在“令牌”参数中插入哪个令牌
  3. 我可以创建一个数据框“df_tweets”并且该函数将每个新下载的推文绑定在其中吗?

这个函数会在 2013 年 4 月 28 日到 2019 年 6 月 2 日之间每天下载 50,000 条推文(注意:我必须查找环境名称,df_tweets 应该是一个空的 data.frame):

bitcointweets <-search_fullarchive(q = "bitcoin", 
n = 50000, 
fromDate = "20130428",
toDate = "20190602",
env_name = "XXX",
parse = T, 
token ="????", 
safedir = df_tweets)

是否有可能估计此下载需要多长时间?

非常感谢。

4

2 回答 2

3

所有令牌参数的第一个(第 3 点)似乎需要一个不记名令牌:

与用户创建的 APP 相关联的令牌(需要开发者帐户),将其转换为不记名令牌以进行高级 API 请求

正如您可以在此处阅读的那样:https://developer.twitter.com/en/docs/basics/authentication/guides/bearer-tokens是通过 curl 请求生成的:

curl -u 'API key:API secret key' \
  --data 'grant_type=client_credentials' \
  'https://api.twitter.com/oauth2/token'

将“API 密钥”和“API 密钥”替换为您的密钥。


其次(第 2 点),高级帐户允许对推文进行分页,即它提供一个令牌,如果要返回的推文数量高于您的帐户允许每个请求的数量,例如 100。这可以在 api 中读取高级搜索参考:https ://developer.twitter.com/en/docs/tweets/search/api-reference/premium-search 由于rtweet参考 中未提及此功能,我不确定它是否在这个阶段。为了使用这个分页,你必须为接下来的争论提供提供的令牌。推特参考指出:

此参数用于获取下一个“页面”结果。与参数一起使用的值直接从 API 提供的响应中提取,不应修改。

因此,如果您可以通过rtweet检索下一个标记,则您可以使用 pagination 参数粘贴您的初始查询,例如

# initial example query looking for the term rtweet, filtering for tweets associated with news, excluding retweets and replies, starting on July 1, 2006 and ending on July 2, 2019
query <- "rtweet filter:news -filter:retweets -filter:replies since:2006-07-01 until:2019-07-02"

# next_token retrieved by request
next <- paste0("next:", next_token)

# search
search_fullarchive(query, n = 100, env_name = "your_developer_environment", token = "your_bearer_token")

# something happens and hopefully you get pagination token
.
.
.

# paste token with initial query
query <- paste0(query, " ", "pagination_token")

# search again, but now with pagination token in query
search_fullarchive(query, n = 100, env_name = "your_developer_environment", token = "your_bearer_token")

显然,这个查询必须循环,直到没有返回分页标记

由于我现阶段没有使用search_fullarchive()函数的经验,而且我真的不确定是否实现了接收分页令牌的可能性,我建议使用 curl 来搜索完整的 twitter 存档。


关于(第 4 点),我建议使用已解析的推文数据帧在循环中使用rbind()(在包rtweetsearch_fullarchive()函数中使用参数parse = TRUE)。


对于您最初的问题(第 1 点):只需循环整个内容,直到达到 50,000 条推文。我认为除了循环之外没有任何可能。

于 2019-07-08T10:57:18.277 回答
0

这方面有什么进展吗?我正在尝试类似的东西,但是当使用在参数中bearer_token生成的时会导致“不是有效的访问令牌”错误消息。token=

于 2019-10-29T06:07:08.910 回答