python-3.x - 如何在 Sandbox 版本中使用 Twitter Premium Search API 检索所有历史公共推文(使用下一个令牌)
问题描述
我想为研究项目下载所有带有特定主题标签和/或关键字的历史推文。我为此获得了高级 Twitter API。我正在使用惊人TwitterAPI
的来处理身份验证等。
我现在的问题是我不是专家开发人员,我在理解next
令牌的工作原理以及如何在 csv 中获取所有推文时遇到了一些问题。
我想要实现的是将所有推文放在一个 csv 中,而无需手动更改fromDate
和toDate
值的日期。现在我不知道如何获取next
令牌以及如何使用它来连接请求。
到目前为止,我到了这里:
from TwitterAPI import TwitterAPI
import csv
SEARCH_TERM = 'my-search-term-here'
PRODUCT = 'fullarchive'
LABEL = 'here-goes-my-dev-env'
api = TwitterAPI("consumer_key",
"consumer_secret",
"access_token_key",
"access_token_secret")
r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL),
{'query':SEARCH_TERM,
'fromDate':'200603220000',
'toDate':'201806020000'
}
)
csvFile = open('2006-2018.csv', 'a')
csvWriter = csv.writer(csvFile)
for item in r:
csvWriter.writerow([item['created_at'],item['user']['screen_name'], item['text'] if 'text' in item else item])
我会非常感谢任何帮助!干杯!
解决方案
首先,TwitterAPI包含一个帮助程序类,它将为您处理这个问题。TwitterPager
适用于多种类型的 Twitter 端点,而不仅仅是高级搜索。这是一个让您入门的示例:https ://github.com/geduldig/TwitterAPI/blob/master/examples/page_tweets.py
但是要回答您的问题,您应该采取的策略是将您当前的请求放入while
循环中。然后, 1. 每个请求都会返回一个next
字段,您可以使用r.json()['next']
. 2. 当您处理完当前批次的推文并准备好下一个请求时,您将包含next
设置为上述值的参数。3. 最后,最终一个请求不会next
在返回的json中包含a。在这一点上打破while
循环。
类似于以下内容。
next = ''
while True:
r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL),
{'query':SEARCH_TERM,
'fromDate':'200603220000',
'toDate':'201806020000',
'next':next})
if r.status_code != 200:
break
for item in r:
csvWriter.writerow([item['created_at'],item['user']['screen_name'], item['text'] if 'text' in item else item])
json = r.json()
if 'next' not in json:
break
next = json['next']
推荐阅读
- django - 如何使用Vue获取在选择组件中选择的值以在另一个组件中使用它
- swiftui - @State var 不存储值
- php - 类别分类与默认类别帖子
- python - 未能提交到链接页面
- android - AccessibilityService 手势:如何点击并按住
- python - 在 Python 中使用 Gmail API 阻止电子邮件地址
- junit4 - 类型不匹配 junit5 @ExtendWith
- r - R:循环从多个数据帧中提取数据?
- vue.js - Vue Js - 如何在加载数据后禁用所有输入
- android - 努力确定此 SecurityException 错误的原因 (Xamarin)