我想用研究项目的某些主题标签和/或关键字下载所有历史推文。我得到了Premium 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])
我真的很感谢任何帮助! 干杯!
答案 0 :(得分:0)
首先,TwitterAPI包含一个帮助程序,它将为您处理此问题。 TwitterPager
适用于多种类型的Twitter端点,而不仅仅是高级搜索。这是一个让您入门的示例:https://github.com/geduldig/TwitterAPI/blob/master/examples/page_tweets.py
但是要回答你的问题,你应该采取的策略是将你当前的请求放在while
循环中。然后,
1.每个请求都会返回next
字段,您可以使用r.json()['next']
获取该字段。
2.当您完成处理当前批次的推文并为下一个请求做好准备时,您可以将next
参数设置为上面的值。
3.最后,最终请求不会在返回的json中包含next
。此时突破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']