Hola el otro día vi en el blog de Ivan López como usaba las alarmas del google calendar, para enviarse SMS al móvil con ‘alertas’, y así poder tener controlado sus servidores.
El ‘problema’, es que esta en java, así que decidí hacer lo mismo pero en php, para que mas gente pudiese usarlo.
El modo de empleo es el mismo, necesitas PHP 5.1.4 o superior (son las necesarias para usar la API) y las librerías ZEND de Gdata.
Para mas información del uso de la API se puede mirar directamente a la web de google code.
/*
** Generador de alertas sms a traves de google
** Basado en el de Ivan Lopez (lopezivan.blogspot.com)
** Elias Badenes, 2007
** elias (at) badenes (dot) es
*/
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
function crearAlerta($cliente, $texto) {
$dia = date('Y-m-d');
$hIni = date('H:i', strtotime('now +6 minutes'));
$hFin = date('H:i', strtotime('now +7 minute'));
$gdataCal = new Zend_Gdata_Calendar($cliente);
$evento = $gdataCal->newEventEntry();
$startDate = $dia;
$endDate = $dia;
$tzOffset = '+02'; //en verano '+02' en invierno '+01'
$startTime = $hIni;
$endTime = $hFin;
//asigno el texto
$evento->title = $gdataCal->newTitle($texto);
//Asigno el tiempo
$cuando = $gdataCal->newWhen();
$cuando->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
$cuando->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
//alerta sms
$metodo = 'sms'; //alert, email o sms
$alerta = $gdataCal->newReminder();
$alerta->setMinutes(5);
$alerta->setMethod('sms');
$cuando->setReminders(array($alerta));
$evento->when = array($cuando);
echo 'Insertando Alerta: '.$texto."\n";
$a = $gdataCal->insertEvent($evento);
}
if(count($argv) < 4) {
echo "Uso: $argv[0] <usuario> <password> <texto>\n";
die();
}
$usuario = $argv[1];
$password = $argv[2];
$texto = '';
$argc = count($argv);
for( $i=3; $i>$argc; $i++) {
$texto .= $argv[$i].' ';
}
$servicio = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$cliente = Zend_Gdata_ClientLogin::getHttpClient($usuario, $password, $servicio);
crearAlerta($cliente, trim($texto));
Espero que lo disfruteis.

WaS
ooohh! si señor facil rapido y sencillo XD
Eres el amo.
korle
y limpio, te has dejado limpio, parece q vida de esto y to
Iván López
Hola,
como ya te he respondido en mi blog, no hay ningún problema en que hayas “convertido” el código a php. Si más gente lo puede utilizar, perfecto. Has respetado los créditos que es lo único que pedía. Muchas gracias y buen trabajo.
Saludos, Iván.
Showman
Tengo apache2 instalado y php5 en mi ubuntu.
pero me da un error al abrir el fichero en el navegador.
Parse error: syntax error, unexpected T_DNUMBER in /srv/www/sms/index2.php on line 17
Me descargue la libreria de donde indicas aqui, librerías ZEND de Gdata pero no se que hacer con ella.
Hace falta el eclipse?????
Un saludo y gracias
Alejandro
Olé por tí.
Muchas gracias.
Y para las Islas Canarias, $tzOffset = ‘+01′;
Además, está clarito, clarito.
Salu2
A.
Alejandro
Hola otra vez.
Leyendo más despacio y pasada la emoción inicial,
me he dado cuenta de que en el default timezone se le puede poner ‘Atlantic/Canary’
y ponerle el offset a 0
y sobre la variable ‘metodo’, ¿ te parece bien esto: ?
$metodo = ‘alert’; //alert, email o sms
…
$alerta->setMethod($metodo);
no ví que ‘metodo’ se usase salvo cuando le asignas un valor.
Y de ahí a poner el tipo de alerta como parámetro es solo un pispas.
O sea, que se puede usar el Calendar como un registro de errores y, si el error es muy grave, alerta sms al canto.
No sabeis cómo os lo agradezco a tí, Elias, y a Iván publicar esto.
Salu2
A.
Elias
Showman: Podrías pasarme el código en esa linea y le hecho un vistazo. Y yo no uso el eclipse para nada.
Alejandro: Como ya te he dicho por e-mail, lo hice para una cosa especifica, ahora la gente que lo adapte como crea conveniente para sus necesidades.
Gracias a ambos dos por leerme
Marta
Hola Elias,
Tengo una duda, sigue funcionando? o han cambiado las librerias? Muchas gracias!!!
Un saludo!
Rafa
Como puedo probar este codigo en local?, alguien le funciona?, a mi no. Hay que añadirle alguna linea de codigo mas, alguna variable.
Isma
Buenas,
he realizado un par de modificaciones al script que permite indicar el calendario en el que queremos insertar el enveto (si no queremos indicar ninguno poner ‘default’) y cambio automático en invierno y verano en función de la zona horaria en la que nos encontremos. Yo lo ejecuto desde el prompt de la siguiente forma:
php5 GMailNotifier.php mi.direccion@gmail.com mi_password “mi_calendario” “Hola desde GNotifier”
Lo he modificado porque trabajo con varios calendarios. Me he creado un calendario para estas notificaciones así no se mezclan con las de otros calendarios. Espero que os sirva de ayuda.
newEventEntry();
//asigno el texto
$evento->title = $gdataCal->newTitle($texto);
//Asigno el tiempo
$cuando = $gdataCal->newWhen();
//Hora actual +6 Y +7 minutos en formato [UTC]
$cuando->startTime = date(“c”,strtotime(“+6 minutes”));
$cuando->endTime = date(“c”,strtotime(“+7 minutes”));
//alerta sms
$metodo = ‘sms’; //alert, email o sms
$alerta = $gdataCal->newReminder();
$alerta->setMinutes(5);
$alerta->setMethod(‘sms’);
$cuando->setReminders(array($alerta));
$evento->when = array($cuando);
//obtenemos el listado de todos los calendarios del usuario
$calFeed = $gdataCal->getCalendarListFeed();
echo “Calendarios Disponibles: \n\n”;
foreach ($calFeed as $calendar) {
echo ” \t\t” . $calendar->title->text . “\n”;
/*
si el calendario es el especificado nos quedamos con su ID $calURI
*/
if ( $calendar->title->text == $calendario ){
$ourCalUrl = explode(‘/’,$calendar->id);
$ourCalUrl = ‘http://www.google.com/calendar/feeds/‘ . $ourCalUrl[6] . ‘/private/full’;
$calUri=$ourCalUrl;
}
}
/*
si existe el calendario indicado inserta el evento en ese calendario
sino se inserta en el calendario del usuario que tiene establecido como por defecto
*/
if (isset($calUri)){
echo “\n Insertando Alerta en $calendario: “.$texto.”\n”;
$calUri=str_replace(‘%40′,’@',$calUri);
$a = $gdataCal->insertEvent($evento, $calUri);
}else{
echo “\n No existe el calendario \”$calendario\”, se inserta en el calendario por defecto \n”;
$a = $gdataCal->insertEvent($evento);
}
}
if(count($argv) <5) {
echo “Uso: $argv[0] \n”;
die();
}
$usuario = $argv[1];
$password = $argv[2];
$calendario = $argv[3];
$texto = ”;
$argc = count($argv);
for($i=4; $i
Un Saludo,
Isma.
/ \
Elias
Gracias por tu aporte! esta tarde lo añado al propio post
Marta
Entonces..si que funciona?
Un saludo!
Isma
Si Marta, funciona. Copiate y pega el código fuente en nuevo fichero. Bájate la librerías de Zend para GData (puedes bajartelo de: http://framework.zend.com/releases/ZendGdata-1.7.4/ZendGdata-1.7.4.tar.gz ).
Abre el *.tar.gz y dentro de él vete a ZendGdata-1.7.4 -> library
Hay una carpeta que se llama “Zend”. Cópiala en la misma carpeta en la que hayas guardado el script.
Te debe quedar de la siguiente forma:
GMailNotifier.php <—- Este es el script
Zend <—- Este es el directorio existente dentro del *.tar.gz
La carpeta Zend debe contener, por ejemplo, directorios como: GData, Http, Mime, Uri, Validate y otros archivox PHP, como por ejemplo: Exception.php, GData.php…. etc …etc…
Yo lo ejecuto desde la shell de Linux con la orden ‘php5′ pero también se podría ejecutar desde Windows (aunque yo no se por qué, a mi personalmente no me mola un huevo Windows, será por que soy administrador de Sistemas Unix? ….
será por deformación profesional …).
Un Saludo,
Isma.
/ \
Marta
Muchas gracias Isma!!!!Ya he creado una alerta! yuju!
Yo estoy empezando con Linux (Ubuntu 8.10) y la verdad es que cuesta empezar, pero luego te acostumbras y ofrece más ventajas.
Aqui os dejo un enlace de un interface web para motion:
http://code.google.com/p/kmotion/
Un saludo!!!!