5

Twitter 在 API 上返回搜索结果时,每个“页面”仅返回 100 条推文。它们在返回值中提供max_id和,可用作参数来获取较早/较晚的推文。since_idsearch_metadata

Twython 3.1.2 文档表明这种模式是搜索的“旧方式”:

results = twitter.search(q="xbox",count=423,max_id=421482533256044543)
for tweet in results['statuses']:
    ... do something

这就是“新方式”:

results = twitter.cursor(t.search,q='xbox',count=375)
for tweet in results:
    ... do something

当我做后者时,它似乎在无休止地迭代相同的搜索结果。我正在尝试将它们推送到 CSV 文件,但它会推送大量重复项。

使用 Twython 搜索大量推文并遍历一组独特结果的正确方法是什么?

编辑:这里的另一个问题是,当我尝试使用生成器 ( for tweet in results:) 进行迭代时,它会反复循环,而不会停止。啊 - 这是一个错误...... https://github.com/ryanmcgrath/twython/issues/300

4

4 回答 4

1

我遇到了同样的问题,但似乎您应该使用 max_id 参数分批遍历用户的时间线。根据 Terence 的回答,批次应该是 100(但实际上,对于 user_timeline,200 是最大计数),并且只需将 max_id 设置为上一组返回的推文中的最后一个 id 减一(因为 max_id 包含在内)。这是代码:

'''
Get all tweets from a given user.
Batch size of 200 is the max for user_timeline.
'''
from twython import Twython, TwythonError
tweets = []
# Requires Authentication as of Twitter API v1.1
twitter = Twython(PUT YOUR TWITTER KEYS HERE!)
try:
    user_timeline = twitter.get_user_timeline(screen_name='eugenebann',count=200)
except TwythonError as e:
    print e
print len(user_timeline)
for tweet in user_timeline:
    # Add whatever you want from the tweet, here we just add the text
    tweets.append(tweet['text'])
# Count could be less than 200, see:
# https://dev.twitter.com/discussions/7513
while len(user_timeline) != 0: 
    try:
        user_timeline = twitter.get_user_timeline(screen_name='eugenebann',count=200,max_id=user_timeline[len(user_timeline)-1]['id']-1)
    except TwythonError as e:
        print e
    print len(user_timeline)
    for tweet in user_timeline:
        # Add whatever you want from the tweet, here we just add the text
        tweets.append(tweet['text'])
# Number of tweets the user has made
print len(tweets)
于 2014-01-13T20:04:14.157 回答
0

根据官方 Twitter API 文档

计数可选

每页返回的推文数量,最多 100

于 2014-01-10T11:56:41.373 回答
0

作为使用 Twython 为搜索查询返回 100 条推文的问题的解决方案,这里是显示如何使用“旧方式”完成它的链接:

带有 next_results 的 Twython 搜索 API

于 2014-02-10T18:22:08.693 回答
0

您需要重复调​​用 python 方法。但是,不能保证这些将是下一个 N,或者如果推文真的出现,它可能会错过一些。

如果您想要在一个时间范围内的所有推文,您可以使用流式 API: https : //dev.twitter.com/docs/streaming-apis 并将其与 oauth2 模块结合使用。

我如何使用 Twitter 的流 api 中的推文并将它们存储在 mongodb 中

python-twitter 流 api 支持/示例

免责声明:我实际上没有尝试过这个

于 2014-01-10T13:27:02.843 回答