UNPKG

binance-historical

Version:

Download historical klines from binance api

49 lines (48 loc) 2.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getKline = getKline; const axios_1 = __importDefault(require("axios")); const utils_1 = require("./utils"); async function getKline(pair, interval, startDate, endDate, source = 'api', version = 'v3', limit = 1000) { try { if (startDate.getTime() > endDate.getTime()) { throw new Error('Start date must be before end date'); } const numberOfCall = (0, utils_1.calculateNumberOfCall)(interval, startDate.getTime(), endDate.getTime()); const numOfIterations = Math.ceil(numberOfCall / limit); const divisions = (0, utils_1.divideInterval)(numOfIterations, startDate.getTime(), endDate.getTime()); let data = []; for (let i = 0; i < divisions.length; i++) { if (i + 1 !== divisions.length) { const start = divisions[i]; const end = divisions[i + 1]; const url = `https://${source}.binance.com/${source}/${version}/klines?symbol=${pair}&interval=${interval}&startTime=${start}&endTime=${end}&limit=${limit}`; const response = await axios_1.default.get(url); data = [...data, ...response.data]; } } if (data.length) --data.length; return data.map((item) => ({ openTime: item[0], open: item[1], high: item[2], low: item[3], close: item[4], volume: item[5], closeTime: item[6], quoteAssetVolume: item[7], trades: item[8], takerBaseAssetVolume: item[9], takerQuoteAssetVolume: item[10], ignored: item[11], })); } catch (error) { console.error(error); throw new Error('Error with binance-api, we cannot get klines for this period or pair 😅'); } }