【问题标题】:How to manage rate limiting with twitter in node js?如何在节点 js 中使用 twitter 管理速率限制?
【发布时间】:2015-05-25 03:17:19
【问题描述】:

我一直在使用 twitter api。我正在尝试从一组帐户中记录一些推文。我正在跟踪 250 个帐户。这当然超过了速率限制。数据采集​​代码如下:

docs.forEach(function (doc) {
    client.get('statuses/user_timeline', {
        screen_name: doc.screen_name,
        limit: 20
    }, function (error, tweets, response) {
        if (error) {
            console.log(error);
            if (error.code == 88) {
                console.log(error);
            }
        } else {
            tweets.sort(function (a, b) {
                return b.retweet_count - a.retweet_count
            });
            var top = tweets.slice(0, 3);
            col_tweets.insert(top, {
                w: 1
            }, function (err, result) {
                if (error) {
                    console.log("error while logging");
                } else {
                    console.log("logged: " + doc.screen_name);
                }
            });
        }
    });

});

如您所见,该程序会记录来自这些帐户的一些推文。我遇到了速率限制错误。我想找到一个为请求计时的解决方案,这样我就不会遇到这些错误。正如我所看到的,有两个问题:a)我最终用完了请求(显而易见的问题)b)我相信我提出请求的速度很快导致零星的速率限制超出问题,即我将有 10 个成功请求,然后是代码:88 错误,然后是 7 个好的错误,依此类推,直到我用完电话。此类问题通常如何处理?如果有一个我可以在代码中看到的简单解决方案,我将不胜感激,否则我想听听任何建议。谢谢!

【问题讨论】:

    标签: javascript node.js twitter rate rate-limiting


    【解决方案1】:

    有许多不同的方法可以解决这个问题,但我建议您为要发出的所有请求(例如数据对象数组)的数据创建一个工作队列。

    然后,您可以在计时器上运行队列末尾的项目,这样您每 N 秒发出的请求永远不会超过一次,并且可能一次运行的请求永远不会超过 M。如果未发布速率限制,那么您可能需要进行一些实验,以查看在不触发任何限制的情况下始终允许您触发请求的速率(通过调整您的计时器时间)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多