我一直在使用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错误,然后是七个错误,依此类推,直到我用完电话为止。通常如何处理此类问题?如果有一个简单的解决方案,可以在代码中看到,我将不胜感激,但否则,我想听听任何建议。谢谢!

最佳答案

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

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

关于javascript - 如何在Node JS中使用Twitter管理速率限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30430740/

10-09 14:31