【问题标题】:Twitter gem: how to avoid searching deeply with max_id?Twitter gem:如何避免使用 max_id 进行深度搜索?
【发布时间】:2015-02-22 23:39:57
【问题描述】:

我希望我的应用每隔几分钟在 Twitter 上搜索带有特定 #tag 的推文,如下所示:

results = client.search("#mypopulartag")

但是,我不想每次都进行完整搜索。在构建应用程序时,我遇到了 Twitter::TooManyRequests 错误,因为它返回了很多结果(大概 Twitter gem 向 Twitter 发出了一个 client.search() 调用所需的尽可能多的请求)。

我不需要它每次都搜索超深。能否将max_id参数传入client.search方法,不浪费API调用?

【问题讨论】:

    标签: ruby-on-rails twitter twitter-gem


    【解决方案1】:

    是的,如果您跟踪已处理的最新推文的 id,则可以通过以下方式获取此后的所有推文(使用 gem 版本 5.13):

      client.search(
        "#mypopulartag",
        result_type: 'recent',
        since_id: since_id   # your last processed id
      ).take(15)
    

    请记住,如果有 60 个结果,您将需要执行更多 client.search 调用才能获取所有推文。对于这些调用,您还需要指定一个 max_id 等于当前搜索中处理的最后一条推文 ID。

    【讨论】:

    • 啊,我明白了。但是,如果自上次搜索以来有很多(约 60 个)新结果,我为什么还要执行更多 client.search 调用呢?我的理解是client.search(省略了.take(15))向 Twitter 搜索 API 发出了尽可能多的请求——这是不正确的吗?
    • 我认为 gem 向 Twitter 发出许多请求以进行 client.search 调用的原因是,当我调用 client.search("#nike") 或任何其他非常受欢迎的标签时,它会永远花费并返回一堆结果,如果我之后立即提出另一个请求,它会给我Twitter::Error::TooManyRequests
    • 刚刚尝试过client.search("#tag", result_type: "recent", since_id: id_of_my_last_saved_tweet),它返回了所有 4500 个结果(自上次查询以来只发布了大约 20 条推文。我也尝试传递一个 max_id,但它似乎也没有效果。任何知道为什么这些参数似乎不起作用?谢谢。
    • 你使用的是什么版本的 gem?
    • 这是一个适合我的示例:#get the id of the third tweetthree_tweets_ago = client.search("#hashtag", result_type: "recent").take(10)[2].idclient.search("#hashtag", result_type: "recent", since_id: three_tweets_ago).count# result is 3, as expected
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2015-07-23
    • 2011-12-26
    相关资源
    最近更新 更多