如何使用Sandbox版本中的Twitter Premium Search API检索所有历史公共推文(使用下一个标记)

时间:2018-06-06 15:58:32

标签: python-3.x api twitter

我想用研究项目的某些主题标签和/或关键字下载所有历史推文。我得到了Premium Twitter API。我使用了惊人的TwitterAPI来处理身份验证,等等。

我现在的问题是我不是专家开发人员,我有一些问题需要了解next令牌如何工作,以及如何在csv中获取所有推文。

我想要实现的是将所有推文放在一个单独的csv中,而无需手动更改fromDatetoDate值的日期。现在我不知道如何获取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])

我真的很感谢任何帮助! 干杯!

1 个答案:

答案 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']