buses-api
Version:
Module that gives Argentina long distance buses schedules
102 lines (99 loc) • 3.24 kB
JavaScript
import request from 'request'
import cheerio from 'cheerio'
class Parser{
company(dom){
let 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
}
leaves(dom){
return dom.text().trim()
}
arrives(dom) {
return dom.text().trim()
}
days(dom) {
let days = {
mon :
cheerio(dom["0"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
tue :
cheerio(dom["1"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
wed :
cheerio(dom["2"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
thu :
cheerio(dom["3"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
fri :
cheerio(dom["4"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
sat :
cheerio(dom["5"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
sun :
cheerio(dom["6"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false,
hol :
cheerio(dom["7"]).children("img").attr("src").toString().indexOf("icon-yes.png") >= 0
? true : false
}
return days
}
service(rows) {
let len = rows.length
return cheerio(rows[len-2]).text().trim()
}
}
export default {
cities: _ => {
return new Promise( (res, rej) => {
request.post('http://www.terminalrosario.gob.ar/wp-content/plugins/terminal-rosario/ajax.php',
{form:{method:'obtenerLocalidades', module:'buscador', type:'json'}},
(err, response, body) => {
if(err) return rej(err)
if(response.statusCode != 200) return rej(response.statusCode)
let results = []
try {
results = JSON.parse(body)
res(results.results)
}catch(e) {
rej(e)
}
})
})
},
travel: (origin, destination) => {
let parser = new Parser()
return new Promise( (res, rej) => {
request.post('http://www.terminalrosario.gob.ar/resultados-buscador',
{form: {origen: origin, destino: destination, buscar: 'Buscar'}},
(err, response, body) => {
if(err) return rej(err)
if(response.statusCode != 200) return rej(response.statusCode)
let html = cheerio.load(body)
let travels = []
let tbody = html('#resultados tbody')
let rows = tbody.children("tr")
for(let i=0; i<rows.length;i++){
let row = cheerio.load(rows[i]);
let 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)
})
})
}
}