UNPKG

egypt-banks-scraper

Version:
84 lines (71 loc) 2.11 kB
import banksClasses from './banks'; import { getBrowser } from './browser'; const banksObjects = {}; banksClasses.forEach((Bank) => { const bankObject = new Bank(); banksObjects[bankObject.name.acronym] = bankObject; }); // get currency rate for currencyCode function getCurrencyRates(rates, currencyCode) { for (let i = 0; i < rates.length; i += 1) { const 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) { const filteredRates = []; currenciesCodes.forEach((code) => { const rate = getCurrencyRates(rates, code); if (rate === null) return; filteredRates.push(rate); }); return filteredRates; } async function getExchangeRates(banks, currencies) { const browser = await getBrowser(); const getRates = async (bank) => { try { const rates = await bank.scrape(browser); // If currencies array empty get all rates const 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 const filteredBanks = banks.length === 0 ? Object.keys(banksObjects) : banks; const result = {}; let banksPromises = []; const ratesPromises = []; for (let i = 0; i < filteredBanks.length; i += 1) { const bankName = filteredBanks[i]; const bank = banksObjects[bankName]; if (bank) { ratesPromises.push(getRates(bank)); } } banksPromises = await Promise.all(ratesPromises); banksPromises.forEach((value) => { result[value.name.acronym] = value; }); await browser.close(); return result; } // getExchangeRates(['AIB'], []).then((data) => { // console.log('data:', data); // }); export { banksObjects, getExchangeRates, };