gpt4 book ai didi

node.js - node.js 中的速率限制 API 请求

转载 作者:搜寻专家 更新时间:2023-11-01 00:03:47 25 4
gpt4 key购买 nike

首先,我是新来的,所以请...温柔一点...过去几个月我一直在自学 node.js,主要是为了从 FlightAware 中抓取一堆数据网站 API。

我正在尝试从他们的网站请求飞机航类列表,这是我目前所拥有的。

var aircraft = [array,of,aircraft,tail,numbers]   

for (i=0; i < aircraft.length; i++) {

faGetFlight(aircraft[i],function doneLookup(data) {

dbUpdateFlight(collectionName, data)
})
}

此代码有效,但一旦列表中的飞机超过 10 架,它就会失败,因为在一分钟内发送超过 10 个 API 请求。有哪些简单/直接的方法可以稍微减慢速度。我想每次运行时总共发送大约 50-60 个 API 请求,所以我需要它间隔 5-6 分钟。 faGetFlight() 函数使用“请求”模块。我试过请求速率限制模块而不是请求模块,但我似乎无法让它工作。我认为授权不能与 request-rate-limiter 模块一起正常工作。获取有关匿名用户的错误。对于它的工作原理,它只适用于请求模块,但我遇到了速率限制问题。

这是我的 faGetFlight() 代码。

var RateLimiter = require('request-rate-limiter');
const REQS_PER_MIN = 10; // that's 25 per second
var limiter = new RateLimiter(REQS_PER_MIN);

//API Variables //
var apiUrl = 'url'
var apiEndpoint = 'endpoint'
var apiAuth = 'apikey'
var apiExtData = 0
var apiHowMany = 15 //Number of results to request.

var options = { method: 'GET',
url: apiUrl + apiEndpoint,
qs: { ident: acIdent
},

headers:
{
Authorization: apiAuth }
};

limiter.request(options, function doneDownload(error, response, body) {
if (error) throw new error(error);
callback(body)
});

}

抱歉,如果不清楚...这是我的第一篇文章!

最佳答案

您可以使用函数和简单的 setTimeout 进行简单的实现。

参见:

var aircrafts = [array,of,aircraft,tail,numbers]; 
var REQS_PER_MIN = 10;
var MAX_AMOUNT_REQUESTS = 100;
var timeout = (1 / REQS_PER_MIN) * 60 * 1000;

processAircraft(0);

function processAircraft(index){
if(index >= MAX_AMOUNT_REQUESTS)
return console.log("All done!");
//On start of function, schedule next processing in "timeout" ms
setTimeout(function(){
processAircraft(index+1);
}, timeout);

faGetFlight(aircrafts[index], function doneLookup(data) {
dbUpdateFlight(collectionName, data)
})
}

关于node.js - node.js 中的速率限制 API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com