如何使用高级完整档案搜索

时间:2019-07-13 17:56:15

标签: python twitter

我想使用高级完整档案在2006年8月8日00:00到2006年8月8日23:59期间获得1000条推文(无转发)。该API每个请求最多返回500条推文。如何在不运行两次代码的情况下获得1000条推文?另外,如何通过包含所有密钥来以csv格式导出推文?

我是python的新手。我试图获取这些推文,但是正如我在摘要描述中所说,我正在获取500条推文(包括rtweets)。另外,当我将推文保存在csv中时,每个偶数行都是空的。 例如:

|---------- |------|------|----|
|created_at |id_str|source|user|
|---------- |------|------  |----|
|2008|949483|www.none.com|John|
|----------|------|------|----|
|empty |empty |empty|empty|
|----------|------|------|----|
|2009|74332|www.non2.com|Marc|
|----------|------|------|----|
|empty |empty |empty|empty|

我的问题是: 我如何才能获得1000条推文(不包括rtweets)而又不会获得重复的推文并运行1次代码?以及如何在没有空偶数行的情况下将输出的所有键保存在csv中?

    from TwitterAPI import TwitterAPI
import csv

SEARCH_TERM = '@nOne'
PRODUCT = 'fullarchive'
LABEL = 'dev-environment'

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':'200608070000',
            'toDate':'200608072359',
             "maxResults":500
            })

csvFile = open('data.csv', 'w',encoding='UTF-8')
csvWriter = csv.writer(csvFile)

for item in r:
    csvWriter.writerow([item['created_at'],
                    item["id_str"],
                    item["source"],                    
                    item['user']['screen_name'],
                    item["user"]["location"],
                    item["geo"],
                    item["coordinates"], 
                    item['text'] if 'text' in item else item])

我希望通过以csv格式运行一次代码来获得具有1000个唯一推文(不包括推文)的数据帧?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您使用的是TwitterAPI包,则应该利用"Inconsistent shape between the condition and the input (got (16, 1) and (16,))"类,该类在返回的JSON中使用TwitterPager元素来获取下一页推文。查看此simple example以了解用法。

在您的情况下,您只需替换以下内容即可:

next

...与此:

r = api.request('tweets/search/%s/:%s' % (PRODUCT, LABEL), 
        {'query':SEARCH_TERM, 
        'fromDate':'200608070000',
        'toDate':'200608072359',
        "maxResults":500
        })

默认情况下,from TwitterAPI import TwitterPager r = TwitterPager(api, 'tweets/search/%s/:%s' % (PRODUCT, LABEL), {'query':SEARCH_TERM, 'fromDate':'200608070000', 'toDate':'200608072359', "maxResults":500 }).get_iterator() 在两次请求之间等待5秒。在沙盒环境中,您应该可以将其减少到2秒而不会超出速率限制。要将等待时间更改为2秒,您可以使用以下参数调用TwitterPager

get_iterator