#!/usr/bin/env ruby # AGI para consulta de festivos en un calendario ICalendar ubicado en nuestro sistema de archivos. # Licencia GPL. # Por Iñaki Baz # Irontec: http://www.irontec.com # Blog Voz-ip: http://blog.voz-ip.com # Variables: categoria_festivo = "Festivo" archivo_calendario = "/var/www/webdav/Spain32Holidays.ics" require 'rubygems' require 'icalendar' require 'date' require_gem 'ruby-agi' # Creamos un objeto AGI: agi = AGI.new # Calendario ICS: cal_file = File.open(archivo_calendario) # Parseamos el fichero: cals = Icalendar.parse(cal_file) # "cals" es en realidad un array pues pueden haber varios calendarios en un fichero ICS. Nos quedamos con el primero (que es el único): cal = cals.first # Fecha de hoy: hoy = Date.today # Para hacer pruebas podemos forzar la fecha de hoy: #hoy = Date.new(2006,11,8) # Comprobamos si es sábado o domingo: # Sábado = 6 # Domingo = 0 if hoy.wday == 6 || hoy.wday == 0 agi.noop("Es fin de semana, colgamos") # Reproducimos la grabación: agi.stream_file("hoy-es-fin-de-semana") agi.hangup() exit end # Comprobamos los eventos del día de hoy: cal.events.each do |event| inicio = Date.new(event.dtstart.year, event.dtstart.month, event.dtstart.day) if event.dtend fin = Date.new(event.dtend.year, event.dtend.month, event.dtend.day) else fin = inicio end # Comparamos con "hoy + 1" porque si un evento dura un día significa que finaliza el día siguiente: if inicio <= hoy && fin >= hoy + 1 event.categories.each do |categoria| if categoria == categoria_festivo agi.noop("Hoy es festivo, colgamos") # Reproducimos la grabación: agi.stream_file("hoy-es-festivo") agi.hangup() exit end end end end