buses-api
Version:
Module that gives Argentina long distance buses schedules
115 lines (103 loc) • 4.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _request = require('request');
var _request2 = _interopRequireDefault(_request);
var _cheerio = require('cheerio');
var _cheerio2 = _interopRequireDefault(_cheerio);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Parser = function () {
function Parser() {
_classCallCheck(this, Parser);
}
_createClass(Parser, [{
key: 'company',
value: function company(dom) {
var company = {};
try {
company.url = dom.children(".detalle_empresa")["0"].attribs.href.trim();
company.nombre = dom.children(".detalle_empresa")["0"].children[0].data.trim();
} catch (e) {}
return company;
}
}, {
key: 'leaves',
value: function leaves(dom) {
return dom.text().trim();
}
}, {
key: 'arrives',
value: function arrives(dom) {
return dom.text().trim();
}
}, {
key: 'days',
value: function days(dom) {
var days = {
mon: (0, _cheerio2.default)(dom["0"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
tue: (0, _cheerio2.default)(dom["1"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
wed: (0, _cheerio2.default)(dom["2"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
thu: (0, _cheerio2.default)(dom["3"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
fri: (0, _cheerio2.default)(dom["4"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
sat: (0, _cheerio2.default)(dom["5"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
sun: (0, _cheerio2.default)(dom["6"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false,
hol: (0, _cheerio2.default)(dom["7"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0 ? true : false
};
return days;
}
}, {
key: 'service',
value: function service(rows) {
var len = rows.length;
return (0, _cheerio2.default)(rows[len - 2]).text().trim();
}
}]);
return Parser;
}();
exports.default = {
cities: function cities(_) {
return new Promise(function (res, rej) {
_request2.default.post('http://www.terminalrosario.gob.ar/wp-content/plugins/terminal-rosario/ajax.php', { form: { method: 'obtenerLocalidades', module: 'buscador', type: 'json' } }, function (err, response, body) {
if (err) return rej(err);
if (response.statusCode != 200) return rej(response.statusCode);
var results = [];
try {
results = JSON.parse(body);
res(results.results);
} catch (e) {
rej(e);
}
});
});
},
travel: function travel(origin, destination) {
var parser = new Parser();
return new Promise(function (res, rej) {
_request2.default.post('http://www.terminalrosario.gob.ar/resultados-buscador', { form: { origen: origin, destino: destination, buscar: 'Buscar' } }, function (err, response, body) {
if (err) return rej(err);
if (response.statusCode != 200) return rej(response.statusCode);
var html = _cheerio2.default.load(body);
var travels = [];
var tbody = html('#resultados tbody');
var rows = tbody.children("tr");
for (var i = 0; i < rows.length; i++) {
var row = _cheerio2.default.load(rows[i]);
var travel = {
origen: origin,
destino: destination,
empresa: parser.company(row(".empresa")),
sale: parser.leaves(row(".sale")),
llega: parser.arrives(row(".llega")),
dias: parser.days(row(".dias")),
servicio: parser.service(row("td"))
};
travels.push(travel);
}
res(travels);
});
});
}
};