egypt-banks-scraper
Version:
Scrape exchange rates from Egypt banks
100 lines (79 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getExchangeRates = exports.banksObjects = undefined;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _banks = require('./banks');
var _banks2 = _interopRequireDefault(_banks);
var _browser = require('./browser');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var banksObjects = {};
_banks2.default.forEach(function (Bank) {
var bankObject = new Bank();
banksObjects[bankObject.name.acronym] = bankObject;
});
// get currency rate for currencyCode
function getCurrencyRates(rates, currencyCode) {
for (var i = 0; i < rates.length; i += 1) {
var filteredRate = rates[i].code === currencyCode ? rates[i] : undefined;
if (filteredRate !== undefined) return filteredRate;
}
return null;
}
// get rates that have currency rate
function filterCurrencies(rates, currenciesCodes) {
var filteredRates = [];
currenciesCodes.forEach(function (code) {
var rate = getCurrencyRates(rates, code);
if (rate === null) return;
filteredRates.push(rate);
});
return filteredRates;
}
async function getExchangeRates(banks, currencies) {
var browser = await (0, _browser.getBrowser)();
var getRates = async function getRates(bank) {
try {
var rates = await bank.scrape(browser);
// If currencies array empty get all rates
var filteredRates = currencies.length === 0 ? rates : filterCurrencies(rates, currencies);
return {
name: bank.name,
rates: filteredRates
};
} catch (e) {
// console.log('error on get rates:', e);
return {
name: bank.name,
rates: []
};
}
};
// If banks array empty get all banks names
var filteredBanks = banks.length === 0 ? (0, _keys2.default)(banksObjects) : banks;
var result = {};
var banksPromises = [];
var ratesPromises = [];
for (var i = 0; i < filteredBanks.length; i += 1) {
var bankName = filteredBanks[i];
var bank = banksObjects[bankName];
if (bank) {
ratesPromises.push(getRates(bank));
}
}
banksPromises = await _promise2.default.all(ratesPromises);
banksPromises.forEach(function (value) {
result[value.name.acronym] = value;
});
await browser.close();
return result;
}
// getExchangeRates(['AIB'], []).then((data) => {
// console.log('data:', data);
// });
exports.banksObjects = banksObjects;
exports.getExchangeRates = getExchangeRates;