Javascript 使用NodeJ调用多个API并将它们合并在一起
我改变问题是因为我觉得我解释错了 我目前使用1个API端点来接收我需要的数据。我需要添加第二个端点以同时接收来自两个端点的数据,将它们合并在一起并存储在数据库中 第一端点- https://api.binance.com/api/v3/klines?symbol=${symbol}&间隔=30m&限制=1 第二终点-https://api.binance.com/api/v3/ticker/24hr?symbol=${symbol} 下面是我如何从第一个端点接收数据Javascript 使用NodeJ调用多个API并将它们合并在一起,javascript,node.js,Javascript,Node.js,我改变问题是因为我觉得我解释错了 我目前使用1个API端点来接收我需要的数据。我需要添加第二个端点以同时接收来自两个端点的数据,将它们合并在一起并存储在数据库中 第一端点- https://api.binance.com/api/v3/klines?symbol=${symbol}&间隔=30m&限制=1 第二终点-https://api.binance.com/api/v3/ticker/24hr?symbol=${symbol} 下面是我如何从第一个端点接收数据 const getBTCDa
const getBTCData = async symbol => {
let data = await fetch(`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=30m&limit=1`).then(res => res.json());
const btcusdtdata = data.map(d => {
return {
Open: parseFloat(d[1]),
High: parseFloat(d[2]),
Low: parseFloat(d[3]),
Close: parseFloat(d[4]),
Timespan: 30,
}
});
console.log(btcusdtdata);
saveToDatebase(symbol, btcusdtdata);
};
Im从此端点返回4个参数
我需要从第二个端点获取一个参数,并将其与第一个端点的参数相结合
我需要第二个端点的这个参数-quoteEvolume:15.30000000
我建立了这个承诺。所有这些都可以是一个解决方案,但我不太明白如何从2个api返回数据,并将它们合并到一个对象中保存在MongoDB中
完整代码
小说明-目标是从两个端点获取数据并将其存储在MongoDB中,并计算过去200天quoteVolume的平均值
const{MongoClient}=require'mongodb';
const schedule=需要“节点计划”;
const fetch=requirenode fetch;
需要'dotenv'.config
使用strict;//这是ES6特有的。快速运行代码的帮助对于通知系统非常重要
const nodemailer=requirenodemailer;
常量符号=[ADABTC、AEBTC、AIONBTC];
//描述性名称有助于您未来的自我和他人更容易理解代码
常量getBTCData=异步符号=>{
让数据=等待获取`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=30m&limit=1`;
常量btcusdtdata=data.mapd=>{
返回{
打开:已解析浮动[1],
高:解析为浮动[2],
低:已解析浮点[3],
关闭:已解析为浮动[4],
卷:已解析为浮动[5],
时间跨度:30,
}
};
console.logbtcusdtdata;
saveToDateBaseSynmbol,btcusdtdata;
//递归函数很复杂,我们可以在这里去掉它
//把责任推给打电话的人
};
//等待超时的助手函数
const sleep=ms=>newpromisers=>setTimeoutres,ms;
const j=schedule.scheduleJob'**',async=>{
//展开此函数以负责循环数据
对于符号的let符号{
等待GetBTCDATA符号;
等待睡眠;
}
};
常量getDateTime==>{
让今天=新的日期;
让date=today.getFullYear+'-'+today.getMonth+1+'-'+today.getDate;
让时间=今天。getHours+:+今天。getMinutes+:+今天。getSeconds;
返回日期+“”+时间;
};
const saveToDatebase=asyncsymbol,BTCdata=>{
试一试{
常量url=mongodb://username:password@ip.address.com:port/dbname?retryWrites=true&w=maist';
让dateTime=getDateTime;
让db=await MongoClient.connecturl,{useUnifiedTopology:true};
constdbo=db.db'Crypto';
const myobj=Object.assign{Name:symbol,Date:dateTime},BTCdata[0];
等待dbo.collectionsymbol.insertOnemyobj;
const average=等待dbo.collectionsymbol.aggregate[{
$addFields:{
DateObj:{
$regexFindAll:{input:$Date,regex:\\d+}
}
}
},
{
$set:{
DateObj:{
$dateFromParts:{
年份:{$toInt:{$arrayElemAt:[$DateObj.match,0]},
月份:{$toInt:{$arrayElemAt:[$DateObj.match,1]},
日期:{$toInt:{$arrayElemAt:[$DateObj.match,2]},
小时:{$toInt:{$arrayElemAt:[$DateObj.match,3]},
分钟:{$toInt:{$arrayElemAt:[$DateObj.match,4]},
第二个:{$toInt:{$arrayElemAt:[$DateObj.match,5]},
时区:欧洲/伦敦
}
}
}
},
{
$match:{
$expr:{
$gte:[$DateObj,{$subtract:[$$NOW,201*60*60*24*1000]}]
}
}
},
{
$group:{
_id:null,
卷:{
$avg:$Volume
}
}
}
].托雷;
控制台。日志“插入了1个文档”;
console.logBTCdata[0]。卷;
console.logaverage[0]。卷;
const RealTimeDataVolume=parseIntBTCdata[0]。卷;
const HistoricalTimeDataVolume=parseIntaverage[0]。卷;//201天卷此处3286033.4285714286
const daytimesrealmaverage=RealTimeDataVolume*48//
此处的1天实时数据196579344
const Previous200dVolume=历史时间数据量-daytimesrealmaverage/200;
const multiplePrevous200dVolume=以前的200dVolume*5;
如果MultiplePrevious200dVolume您需要执行res[quoteEvolume]以获取数据。您可以用调用第一个API的相同方式调用第二个API,只需更改URL并从响应中提取quoteEvolume。您可以用现在调用的相同方式调用。此外,您可能希望使用request-promise或Axios来轻松处理内容。如果您使用相同的方法,是否有任何问题?@Yos这是同时调用两个API的方法吗?我需要从一个api和另一个api的一些数据只是复制粘贴调用klines api的代码,并更改第二个api的url。我不明白这是怎么回事issue@Yos我更新了主要问题,很抱歉,但我仍然对如何从第二个API和第一个API一起接收数据感到困惑。