# Description: # si collega al registro elettronico e controlla l'agenda # # Dependencies: # "cheerio": "0.19.0" # "nightmare": "1.8.0" # "moment": "2.10.2" # # Configuration: # REGISTRO_USERNAME - username per login al registro # REGISTRO_PASSWORD - password per login al registro # # Commands: # hubot cosa c'è per (domani|il (data))? - controlla agenda per la data richiesta # # Author: # Enrico Fasoli (fazo96) # Nightmare = require 'nightmare' cheerio = require 'cheerio' moment = require 'moment' downloadAgenda = (day, cb) -> cbCalled = no htmlData = "" loadHtml = -> document.body.innerHTML saveHtml = (data) -> htmlData = data dayHasEvents = (b) -> unless b cbCalled = yes cb [] n = new Nightmare() .goto('https://galilei-cr-sito.registroelettronico.com/login/') .type('#username',process.env.REGISTRO_USERNAME) .type('#password',process.env.REGISTRO_PASSWORD) .click('#btnLogin').wait() if process.env.REGISTRO_ID_STUDENTE n.goto('https://galilei-cr-sito.registroelettronico.com/select-student/'+process.env.REGISTRO_ID_STUDENTE+'/') n.goto('https://galilei-cr-sito.registroelettronico.com/agenda/?d='+day) .evaluate(loadHtml, saveHtml) n.run (err,nightmare) -> if err then console.log err if !cbCalled and htmlData.length > 0 rowExtractor = -> if $('td',this).get(1)? $($('td',this).get(1)).text().trim() else "(niente)" $ = cheerio.load htmlData tab = $('.result_table tr').map(rowExtractor).get() tab.splice 0, 2 cb tab cosaCePerIl = (day,res) -> unless process.env.REGISTRO_USERNAME and process.env.REGISTRO_PASSWORD return res.send 'non dispongo delle credenziali per il registro :(' res.send 'aspetta che guardo l\'agenda per il '+day+' (potrei metterci fino a 3 minuti)' downloadAgenda day, (data) -> if data.length is 0 res.send "non c'è niente segnato sull'agenda per il "+day else res.send "ecco cosa c'è per doma: "+data.join('; ') module.exports = (robot) -> robot.respond /cosa c'è per domani?/i, (res) -> cosaCePerIl moment().add(1, 'days').format('YYYY-MM-DD'), res robot.respond /cosa c'è per il (\d+-\d+-\d+)/i, (res) -> cosaCePerIl res.match[1], res