Alarmas Sms (gracias a google)

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.

18 Responses to Alarmas Sms (gracias a google)
  1. WaS Responder

    ooohh! si señor facil rapido y sencillo XD

    Eres el amo.

  2. korle Responder

    y limpio, te has dejado limpio, parece q vida de esto y to

  3. Iván López Responder

    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.

    • Bunny Responder

      what a fascinating woman; any particular reason she favors nesting dolls or just because they are fun?I love her &qqtr;vulgat&uuoo; colors– I'm generally a huge fan of both color and vulgarity.

  4. Trackback: meneame.net
    Alarmas Sms (gracias a google)... Pequeño script en PHP para mandarte alertas SMS....... meneame.net/story/alarmas-sms-gracias-a-google
  5. Showman Responder

    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

  6. [...] correos, pop-ups cuando estas en la cuenta o bien envio de mensajes al celular. En esta otra Web, Elias ... marcosdonoso.cl/?p=89
  7. Alejandro Responder

    Olé por tí.
    Muchas gracias.
    Y para las Islas Canarias, $tzOffset = ‘+01’;

    Además, está clarito, clarito.

    Salu2
    A.

  8. Alejandro Responder

    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.

  9. Elias Responder

    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 😉

  10. Marta Responder

    Hola Elias,

    Tengo una duda, sigue funcionando? o han cambiado las librerias? Muchas gracias!!!

    Un saludo!

  11. Rafa Responder

    Como puedo probar este codigo en local?, alguien le funciona?, a mi no. Hay que añadirle alguna linea de codigo mas, alguna variable.

  12. Isma Responder

    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 Responder

      Gracias por tu aporte! esta tarde lo añado al propio post 🙂

  13. Marta Responder

    Entonces..si que funciona?

    Un saludo!

  14. Isma Responder

    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.
    / \

  15. Marta Responder

    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!!!!

  16. Daniel Responder

    He estado probando y no me funciona para ejecutarlo desde web pasandole los parametros…
    ¿Como debe hacerse?

Deja un comentario

Your email address will not be published. Please enter your name, email and a comment.