【问题标题】:Tweepy rate limit / pagination issue.Tweepy 速率限制/分页问题。
【发布时间】:2014-12-15 21:25:12
【问题描述】:

我已经组装了一个小型推特工具来提取相关推文,以便以后在潜在语义分析中进行分析。具有讽刺意味的是,那一点(更复杂的一点)工作得很好——它正在拉动推文,这就是问题所在。我正在使用下面的代码进行设置。

这在技术上有效,但没有像预期的那样 - 我认为 .items(200) 参数会在每个请求中提取 200 条推文,但它被阻止为 15 个推文块(因此 200 项“花费”了我 13 个请求) - 我了解这是原始/默认 RPP 变量(现在 Twitter 文档中的“计数”),但我已经在 Cursor 设置中尝试过(rpp=100,这是 twitter 文档中的最大值),它没有区别。

Tweepy/Cursor docs
The other nearest similar question isn't quite the same issue

感谢任何想法!我确定这是对设置的一个小调整,但我在 page 和 rpp 上尝试了各种设置,但无济于事。

auth = tweepy.OAuthHandler(apikey, apisecret)
auth.set_access_token(access_token, access_token_secret_var)
from tools import read_user, read_tweet
from auth import basic
api = tweepy.API(auth)
current_results = []
from tweepy import Cursor
for tweet in Cursor(api.search,
                       q=search_string,
                       result_type="recent",
                       include_entities=True,
                       lang="en").items(200):
    current_user, created = read_user(tweet.author)
    current_tweet, created = read_tweet(tweet, current_user)
    current_results.append(tweet)
print current_results

【问题讨论】:

  • 知道如何立即获取特定主题标签的推文数量吗?我正在使用trends_place 来获取特定于某个国家/地区的趋势。我想要更多信息,包括特定主题标签的推文数量。

标签: django python-2.7 twitter tweepy django-1.6


【解决方案1】:

在同事的帮助下,我最终解决了这个问题。 Afaict,rpp 和 items() 调用是在实际 API 调用之后进行的。 Twitter documentation 中的“计数”选项,如上文所述,以前是 RPP,在 Tweepy 2.3.0 中仍被称为 rpp,似乎在这里存在问题。

我最终做的是修改 Tweepy 代码 - 在 api.py 中,我将“count”添加到搜索绑定部分(在我的安装中大约 L643,ymmv)。

""" search """
search = bind_api(
    path = '/search/tweets.json',
    payload_type = 'search_results',
    allowed_param = ['q', 'count', 'lang', 'locale', 'since_id', 'geocode', 'max_id', 'since', 'until', 'result_type', **'count**', 'include_entities', 'from', 'to', 'source']
)

这让我可以将上面的代码调整为:

for tweet in Cursor(api.search,
                       q=search_string,
                       count=100,
                       result_type="recent",
                       include_entities=True,
                       lang="en").items(200):

这会导致两次调用,而不是十五次;我已经用

仔细检查了这个
print api.rate_limit_status()["resources"]

每次通话后,每次仅将剩余的搜索次数减少 2 次。

【讨论】:

  • 是的,我必须再等 12 个小时才能完成。 :)
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2015-04-21
  • 2017-02-06
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多