69 lines
2.2 KiB
CoffeeScript
69 lines
2.2 KiB
CoffeeScript
# 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
|