UNPKG

leagues

Version:

Scraper for Worldwide Football Leagues

83 lines (69 loc) 2.02 kB
'use strict' var async = require('async'), path = require('path'), util = require('util'), EventEmitter = require('events'), _ = require('lodash'); var selector = require(path.join(__dirname, 'selector'))(); function Scraper() { EventEmitter.call(this); } util.inherits(Scraper, EventEmitter); module.exports = function() { return new Scraper(); }; Scraper.prototype.scrape = function(id, leagues) { var self = this; var progress = 0; var progressIncrement = 100 / leagues.length; self.emit('starting', id); self.emit('progress', {uuid: id, progress: progress}); return new Promise(function(resolve, reject) { var results = []; async.each(leagues, function(league, leagueCb) { var scraper = selector.getScraper(league.league); if (scraper) { self.emit('initializing', {uuid: id, league: league.league}); scraper.init(function() { self.emit('scraping', {uuid: id, league: league.league}); scraper.helpers.standings.full().then(function(res) { res.driver.close(); results.push({ league: league.league, order: league.order, scraperInfo: scraper.info(), data: res.data }); progress += progressIncrement; self.emit('scraped', {uuid: id, league: league.league}); self.emit('progress', {uuid: id, progress: progress}); leagueCb(); }).catch(function(err) { leagueCb(err); }); }); } else { leagueCb(); } }, function(err) { if (err) { self.emit('done:with-error', id); reject(err); } else { self.emit('done', id); if (results.length) { resolve({ uuid: id, results: _.sortBy(results, 'order') }); } else { resolve({ uuid: id, results: results }); } } }); }); };