Tweepy(Twitter API)未返回全部搜索结果

8

我正在使用Tweepy 的搜索功能来搜索Twitter,但是结果限制在15个。这是我的代码:

results=api.search(q="Football",rpp=1000)

for result in results:
    print "%s" %(clNormalizeString(result.text))

print len(results)

仅返回15个结果,这是否与不同页面的结果有关?

1
看起来有一个count参数来控制结果的数量,但是有没有办法显示所有的结果呢? - user1893354
我使用参数“count”而不是“rpp”,来获得默认的加载量(15)。 - Sayan
2个回答

25

这个问题更多关于Twitter API,而不是tweepy本身。

根据文档count参数定义如下:

每页返回的推文数,最多为100条,默认为15条。在旧版搜索API中,该参数曾用名“rpp”。

顺带一提,您可以使用tweepy.Cursor获取分页结果,像这样:

import tweepy


auth = tweepy.OAuthHandler(..., ...)
auth.set_access_token(..., ...)

api = tweepy.API(auth)
for tweet in tweepy.Cursor(api.search,
                           q="google",
                           count=100,
                           result_type="recent",
                           include_entities=True,
                           lang="en").items():
    print tweet.created_at, tweet.text

另请参阅:https://github.com/tweepy/tweepy/issues/197

希望这可以帮到您。


api.search目前不受支持。 - Ritwik

4
这是一个最小化的工作示例(一旦你用真实的密钥替换了假密钥)。
import tweepy
from math import ceil

def get_authorization():

    info = {"consumer_key": "A7055154EEFAKE31BD4E4F3B01F679",
            "consumer_secret": "C8578274816FAEBEB3B5054447B6046F34B41F52",
            "access_token": "15225728-3TtzidHIj6HCLBsaKX7fNpuEUGWHHmQJGeF",
            "access_secret": "61E3D5BD2E1341FFD235DF58B9E2FC2C22BADAD0"}

    auth = tweepy.OAuthHandler(info['consumer_key'], info['consumer_secret'])
    auth.set_access_token(info['access_token'], info['access_secret'])
    return auth


def get_tweets(query, n):
    _max_queries = 100  # arbitrarily chosen value
    api = tweepy.API(get_authorization())

    tweets = tweet_batch = api.search(q=query, count=n)
    ct = 1
    while len(tweets) < n and ct < _max_queries:
        print(len(tweets))
        tweet_batch = api.search(q=query, 
                                 count=n - len(tweets),
                                 max_id=tweet_batch.max_id)
        tweets.extend(tweet_batch)
        ct += 1
    return tweets

注意:我尝试过使用for循环,但是Twitter API有时会返回少于100条结果(即使请求了100条并且有100条可用)。我不确定原因是什么,但这就是我没有包含检查以在tweet_batch为空时中断循环的原因——您可能需要添加这样的检查,因为查询速率限制存在。
另一个注:您可以通过像这样调用wait_on_rate_limit=True来避免触发速率限制。
        api = tweepy.API(get_authorization(), wait_on_rate_limit=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接