我想使用高级完整档案在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个唯一推文(不包括推文)的数据帧?
谢谢
答案 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