Insertar un botón en tu web para añadir un evento a Google Calendar.

 

Hola a todos:

Si mostramos eventos en una página web puede ser interesante añadir un botón para que el visitante pueda pinchando en el añadir el evento a su calendario en google calendar.

He creado una función en php que nos permite de forma sencilla crear la url necesaria para crear el enlace que nos cree el evento en google calendar:

<?php
/********************************************************************
* Función getGCalendar (Eduardo Revilla Vaquero)                    *
* Genera url para la creación de un evento en google calendar.      *
*********************************************************************/

function getGCalendarUrl($event){ $titulo = urlencode($event['titulo']); $descripcion = urlencode($event['descripcion']); $localizacion = urlencode($event['localizacion']); $start=new DateTime($event['fecha_inicio'].' '.$event['hora_inicio'].' '.date_default_timezone_get()); $end=new DateTime($event['fecha_fin'].' '.$event['hora_fin'].' '.date_default_timezone_get()); $dates = urlencode($start->format("Ymd\THis")) . "/" . urlencode($end->format("Ymd\THis")); $name = urlencode($event['nombre']); $url = urlencode($event['url']); $gCalUrl = "http://www.google.com/calendar/event?action=TEMPLATE&amp;text=$titulo&amp;dates=$dates&amp;details=$descripcion&amp;location=$localizacion&amp;trp=false&amp;sprop=$url&amp;sprop=name:$name"; return ($gCalUrl); }

 

La función recibe como parámetro un array asociativo con los campos necesarios para crear el evento.

Un ejemplo del array sería este:

$evento = array(
 'titulo' => 'Mi evento de prueba',
 'descripcion' => 'Descripcion del evento de prueba',
 'localizacion' => 'Aqui ponemos la dirección donde se celebra el evento',
 'fecha_inicio' => '2014-04-10', // Fecha de inicio de evento en formato AAAA-MM-DD
 'hora_inicio'=>'17:30', // Hora Inicio del evento
 'fecha_fin'=>'2014-04-12', // Fecha de fin de evento en formato AAAA-MM-DD
 'hora_fin'=>'19:00', // Hora final del evento
 'nombre'=>'ReviBlog', // Nombre del sitio
 'url'=>'www.reviblog.net' // Url de la página
);

Ahora solo nos queda crear el link en html asignandole la url devuelta por la función getGCalendarUrl:

<a href="<?php echo getGCalendarUrl($evento); ?>"><img src="http://www.google.com/calendar/images/ext/gc_button6_es.gif" border="0"></a>

Para probarlo puedes crear un archivo php y pegar el siguiente código donde todo junto quedaria así:

<?php
/********************************************************************
* Función getGCalendar (Eduardo Revilla Vaquero)                    *
* Genera url para la creación de un evento en google calendar.      *
*********************************************************************/function getGCalendarUrl($event){
$titulo = urlencode($event['titulo']);
$descripcion = urlencode($event['descripcion']);
$localizacion = urlencode($event['localizacion']);
$start=new DateTime($event['fecha_inicio'].' '.$event['hora_inicio'].' '.date_default_timezone_get());
$end=new DateTime($event['fecha_fin'].' '.$event['hora_fin'].' '.date_default_timezone_get()); $dates = urlencode($start->format("Ymd\THis")) . "/" . urlencode($end->format("Ymd\THis"));
$name = urlencode($event['nombre']);
$url = urlencode($event['url']);
$gCalUrl = "http://www.google.com/calendar/event?action=TEMPLATE&amp;text=$titulo&amp;dates=$dates&amp;details=$descripcion&amp;location=$localizacion&amp;trp=false&amp;sprop=$url&amp;sprop=name:$name";
return ($gCalUrl);
}
// array asociativo con los parametros mecesarios.
$evento = array(
  'titulo' => 'Mi evento de prueba',
  'descripcion' => 'Descripcion del evento de prueba',
  'localizacion' => 'Aqui ponemos la dirección donde se celebra el evento',
  'fecha_inicio' => '2014-04-10', // Fecha de inicio de evento en formato AAAA-MM-DD
'hora_inicio'=>'17:30', // Hora Inicio del evento
'fecha_fin'=>'2014-04-12', // Fecha de fin de evento en formato AAAA-MM-DD
'hora_fin'=>'19:00', // Hora final del evento
'nombre'=>'ReviBlog', // Nombre del sitio
'url'=>'www.reviblog.net' // Url de la página
);
?>
<a href="<?php echo getGCalendarUrl($evento); ?>"><img src="http://www.google.com/calendar/images/ext/gc_button6_es.gif" border="0"></a>

Este código nos generará un botón como este:

 

Espero que sea de utilidad.

Un saludo, y si aún no lo has hecho no olvides suscribirte a mi blog para no perderte los próximos posts  :-),

También puedes seguirme en Twitter en ‎@revigames y no olvides que me ayudas mucho si compartes este post en las redes sociales.

28 comentarios en “Insertar un botón en tu web para añadir un evento a Google Calendar.

  1. Estudio Ingeniería en Computación, lo probé y funciona perfecto. Con su permiso lo usaré como parte de mi tesis, dada a su gran funcionalidad. Saludos desde Chile.

  2. Hola Eduardo, me podrías decir qué librería de cliente utilizas?? Tu ejemplo me funciona perfectamente, pero quiero hacerlo yo y no hay manera 🙁

    Un saludo y muchas gracias. Ana

    1. Hola Ana,
      No se necesita ninguna librería de cliente. En principio llamando a la función pasándole los parámetros como indico debería funcionar. ¿Puedes poner el código que estás utilizando para crear el botón para ver si hay algún error y te puedo ayudar?

      Gracias por comentar

  3. <?php
    require_once 'google-api-php-client/src/Google_Client.php';
    require_once 'google-api-php-client/src/contrib/Google_CalendarService.php';
    $opcion="insertar";

    En realidad, mi problema es este:

    Warning: require_once(google-api-php-client/src/Google_Client.php): failed to open stream

    Necesito insertar, modificar, eliminar eventos en un calendario utilizando PHP, hace "mil años" que abandoné la programación y ahora estoy muy perdida con todo esto.

    En todos los manuales que encuentro, me dicen que necesito la biblioteca… Como puedes ver estoy muy, muy liada 🙁

    Muchas gracias por tu respuesta. Ana.

    1. Hola de nuevo Ana:

      Yo en mi post enseño como añadir un evento de manera sencilla generando una url. Esto nos sirve para colocar un botón o un enlace en nuestra página para añadir un evento a google calendar. Si necesitas modificar o eliminar el evento desde php entonces si te hace falta utilizar las librerías que comentas. En ese caso el error que te está dando es que no encuentra ese archivo. Verifica que se encuentra en la ruta correcta a partir de la ruta relativa al archivo que le llama. Por otro lado en este link: http://blogs.ua.es/labseps/2014/10/17/insertar-un-evento-en-un-calendario-publico-de-google-con-php-y-la-api-v3/ he encontrado información que tal vez te sirva de ayuda. No desesperes Ana, la programación puede ser difícil si llevas tiempo sin programar, pero cuando por fin lo consigues es una satisfacción muy grande :-). Ánimo que ya verás como al final lo consigues 🙂

      Un saludo

      1. Hola de nuevo, Eduardo:

        Muchísimas gracias por tus ánimos, por supuesto que lo voy a conseguir 🙂 y además te lo contaré 😉

        Mira, esa página que me envías, la tengo mirada de arriba a abajo. Pero cuando tú me la has indicado, la he vuelto a revisar y he entrado donde pone “… Nos hemos basado principalmente en las indicaciones de este artículo…” Ahí, en la documentación anterior, he encontrado el comentario de un chico, Kyle Fritz, que “se quejaba” de la falta de actualización en la documentación de Google cuando se producen cambios…

        En su comentario sí se reflejaban esos cambios y finalmente he conseguido que mi biblioteca FUNCIONE!!!!

        Te pongo lo que te escribí en el mensaje anterior, pero esta vez actualizado:

        <?php
        require_once 'google-api-php-client/src/Google/Client.php';
        require_once 'google-api-php-client/src/Google/Service/Calendar.php';

        Una vez más, muchísimas gracias!!! 😉 … prometo volver a preguntarte alguna duda otro día 😛

        Saludos, Ana.

    1. Hola Mark:

      Para poder añadir eventos al calendario en iOS (iCalendar) necesitas generar un archivo .ics, lo puedes generar a mano o con algún lenguaje de servidor(php etc), pero no puedes hacerlo directamente desde una url. Lo que si puedes hacer es que esa url enlace al archivo ics.
      El el contenido del archivo ics tiene que tener un aspecto similar a esto:

      BEGIN:VCALENDAR
      VERSION:2.0
      PRODID:-//hacksw/handcal//NONSGML v1.0//EN
      BEGIN:VEVENT
      UID:uid1@example.com
      DTSTAMP:19970714T170000Z
      ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
      DTSTART:19970714T170000Z
      DTEND:19970715T035959Z
      SUMMARY:Bastille Day Party
      END:VEVENT
      END:VCALENDAR

      Para más información echa un vistazo a este articulo wikipedia:

      https://en.wikipedia.org/wiki/ICalendar

      Un saludo

  4. Fastastico tutorial. ¿Seria posible indicar un calendario en concreto? De la misma manera que ponemos una fecha o descripción por defecto, indicar también el calendario. Intento hacerlo con calendarID=$cal&amp donde $cal es el id del calendario que quiero, pero por defecto siempre se el mismo…

  5. Siento comentar el artículo 3 años después de su creación, pero veo que tú contestas los comentarios (algo que se agradece por cierto) y me ha surgido una duda respecto a este método… :).

    ¿Sabes si existe la manera, mediante parámetros (como en tu ejemplo), de agregar la frecuencia del evento? En lugar de clicar en “Repetir” > “Anual” poder pasarle algún parámetro del estilo “FREQ=YEARLY”?

    Gracias, un saludo!

    1. Hola Javier,
      yo no he encontrado ningún parámetro para poder indicarle directamente la frecuencia del evento, me temo que no es posible, no obstante si descubres la manera de hacerlo sería de agradecer que lo comentases aquí para ayudar a otros que tengan la misma duda.
      Muchas gracias por comentar.

      Un saludo

  6. Buenisimo!
    Tengo una pagina web de alquiler de autocaravanas y para poder gestionar mejor las reservas habia pensado en sincronizar de alguna manera que cada vez que se haga una reserva se cree un evento en google calendar para poder verlo desde el movil, lo ves viable?
    Toda la pagina esa en php . Boosstrap.

    Gracias!!

    1. Hola Aitor, gracias por tu comentario.

      La función que muestro en este post (que por cierto ya es bastante antiguo) nos sirve para crear un botón que directamente te abra google calendar con los datos del evento insertados en un nuevo evento, pero el usuario tiene que guardar el evento después para insertarlo en el calendario.

      Para lo que tú necesitas tendrías que llamar a la API de google calendar desde el servidor, requiere autorización y el proceso es un poco más complejo porque tendrás que crear una aplicación en la consola de google para poder utilizar la API.

      Te dejo el link a la documentación oficial de la API google calendar por si te sirve de ayuda:
      https://developers.google.com/calendar/v3/reference/events/insert#php

      Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.