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

时间:2015-05-25 03:17:20

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

我一直在使用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错误然后七个好的等等,直到我用完了电话。这种问题通常是如何处理的?如果我能在代码中看到一个简单的解决方案,我会很感激,但除此之外我还想听听任何建议。谢谢!

1 个答案:

答案 0 :(得分:1)

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

然后,你可以在一个计时器上运行队列末尾的项目,这样你就不会每N秒发出一次以上的请求,也许你一次就不会有超过M个请求。如果没有公布费率限制,那么您可能需要进行一些实验,以确定一直允许以何种比率触发请求(通过调整计时器时间)而不会触发任何限制。