如何在节点 js 中使用 twitter 管理速率限制?

How to manage rate limiting with twitter in node js?

我一直在使用 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 个正常请求,依此类推,直到我 运行 没电了。这类问题通常是如何处理的?如果有一个我可以在代码中看到的简单解决方案,我将不胜感激,否则我希望听到任何建议。谢谢!

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

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