egypt-banks-scraper
Version:
Scrape exchange rates from Egypt banks
84 lines (67 loc) • 2.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var path = require('path');
var env = require('node-env-file');
env(path.join(__dirname + '../../../.env'));
var Bank = function () {
/**
* @param {Object} bankName names of the bank acronym, english,
* arabic, etc
* @param {String} url of the bank exchange rates web page
*/
function Bank(bankName, bankURL, selector) {
(0, _classCallCheck3.default)(this, Bank);
this.name = bankName;
this.url = bankURL;
this.selector = selector;
}
/**
* Request then pass html to scraper function for scraping
* @param {function} finish callback to pass rates to when finish scraping
*/
(0, _createClass3.default)(Bank, [{
key: 'scrape',
value: async function scrape(browser) {
/**
* [rates description]
* @type {Array} rates [
* {
* code: USD, //currency iso code
* buy: 20.4,
* sell: 18.25
* },
* {
* code: EUR,
* buy: 18,
* sell: 16.5
* }
* ]
*/
var rates = null;
try {
var page = await browser.newPage();
await page.setDefaultNavigationTimeout(process.env.timeout);
await page.goto(this.url);
await page.waitForSelector(this.selector);
var bodyHandle = await page.$('body');
var html = await page.evaluate(function (body) {
return body.innerHTML;
}, bodyHandle);
rates = this.scraper(html);
return rates;
} catch (e) {
console.log(this.url, '\nerror on get page by puppeteer:', e);
return [];
}
}
}]);
return Bank;
}();
exports.default = Bank;