Cyber Monday Sale 40% off unlimited courses & creative assets! 40% off unlimited assets! Save Now
Advertisement
  1. Code
  2. PHP

Creando su startup: Exportando archivos iCal a eventos de calendario

by
Read Time:9 minsLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Simplifying Onramp With OAuth
Building Your Startup With PHP: Choosing and Configuring Production Hosting

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Introducción

Este tutorial forma parte de la serie Creando su startup con PHP en Envato Tuts +. En esta serie, te estoy guiando a través del lanzamiento de un inicio de concepto a realidad utilizando mi aplicación de Meeting Planner como un ejemplo de la vida real. Cada paso a lo largo del camino, voy a lanzar el código de Meeting Planner como ejemplos de código abierto que puede aprender. También me ocuparé de asuntos relacionados con el inicio de negocios a medida que surjan.

También me complace anunciar que Meeting Planner está listo para probar. Puede enviar invitaciones a reuniones, recopilar comentarios de su participante y finalizar la reunión, importando el archivo iCal que describiré hoy en sus calendarios. Por lo tanto, visite MeetingPlanner.io y dele una oportunidad.

¿Qué cubre este episodio?

Building Your Startup - Example Invite File in WebmailBuilding Your Startup - Example Invite File in WebmailBuilding Your Startup - Example Invite File in Webmail

En el último tutorial, describí cómo construí enlaces de comandos y operaciones codificadas para los participantes que comienzan a responder a invitaciones por correo electrónico, es decir, viendo la página de la reunión o aceptando o rechazando un lugar o una hora.

También mencioné cómo una mujer que había estado saliendo sugirió que ella no sabía si o cuándo me vería otra vez sin una invitación del Meeting Planner, que proporcioné pronto. Y luego dijo que no sabría cuándo ni dónde aparecer sin una entrada de calendario de Google. En el tutorial de hoy, describiré cómo construí la característica iCal para entregar un archivo .ics que podría importar para una cita exitosa. Siempre es útil tener a alguien motivando el desarrollo, pero usualmente son colegas o un gerente de desarrollo.

Apenas un recordatorio, todo el código para el planificador de la reunión se escribe en el marco de Yii2 para PHP. Si desea obtener más información sobre Yii2, consulte nuestra serie paralela Programación con Yii2 en Envato Tuts +.

Participo en los hilos de los comentario de abajo y estoy especialmente interesado si tiene ideas adicionales o desea sugerir temas para futuros tutoriales. También puede contactarme en Twitter @reifman.

¿Qué es un archivo iCal?

Definiendo iCalendar, Wikipedia dice:

ICalendar es un formato de archivo informático que permite a los usuarios de Internet enviar solicitudes de reunión y tareas a otros usuarios de Internet, por correo electrónico o compartir archivos con una extensión de .ics.

Básicamente, es un archivo con la extensión .ics que incluye información pertinente sobre una reunión, el organizador y los asistentes, la fecha, hora y duración, la ubicación y más, todo en un formato que una variedad de plataformas y servicios de calendario pueden reconocer.

Aunque iCalendar tiene funciones avanzadas, en esta etapa del MVP (MVP) de Meeting Planner , quería asegurar que nuestras reuniones programadas se podían importar fácilmente a Google Calendar, Apple Calendar y Microsoft Outlook y ser reconocidas por los servicios de correo web. Trabajaré más adelante para ampliar su funcionalidad.

A través de tutoriales anteriores, había creado la funcionalidad que recogía toda la información necesaria, como participantes, fechas y horas y ubicaciones. Ahora, sólo necesitaba publicar los detalles del evento en un archivo adjunto y entregarlo por correo electrónico.

Creación del archivo .ics

En lugar de escribir código de .ics desde cero, comencé con el Generador de Archivos ics de Ahmad Amin y lo personalizé. Coloqué el código en /common/models/Calendar.php.

Los archivos iCal dependen de quién es el usuario. En otras palabras, deben ser personalizados para la entrega. Principalmente, los vínculos de regreso a Meeting Planner deben ser personalizados para la autenticación para el titular de ese archivo .ics en particular.

Durante el proceso de finalización de la reunión, creamos un archivo de eventos para cada participante con enlaces únicos y autenticados:

Dentro del modelo Meeting, el método buildCalendar reúne todos los datos que el generador necesitará para cada usuario:

Si hay una ubicación (para reuniones en persona), incluyo un enlace al sitio web del lugar (si está disponible) y una dirección para los mapas incrustados. He decidido codificar fechas y horas en formato UTC para simplificar.

Se establece la información común de la reunión y, a continuación, se agregan el organizador y los asistentes.

A continuación se muestra un ejemplo de archivo cuando se completa:

Entrega del archivo .ics como archivo adjunto

En este tutorial anterior, describí el uso de la compatibilidad de correo incorporada de Yii2 con la extensión SwiftMailer para entregar invitaciones a reuniones. Para la entrega de transporte, utilicé la integración del servicio SMTP de Mailgun.

Ciertamente, en el pasado, integrar adjuntos en mensajes era complicado, pero ahora es bastante fácil con Yii. Aquí está el código para agregar el archivo a la invitación de la reunión saliente:

Solo necesitaba usar el $icsPath devuelto anteriormente y usar el método attachContent para incluirlo con el correo electrónico de invitación.

Esto es como se veia cuando llega a Gmail:

Building a Startup iCal Files - Gmail InvitationBuilding a Startup iCal Files - Gmail InvitationBuilding a Startup iCal Files - Gmail Invitation

Cuando abrí el archivo de invitación en Mac OS, Apple Calendar presentó este primer paso para seleccionar un calendario para agregar el evento a:

Building a Startup iCal Files - Apple Calendar Add Event Dialog BoxBuilding a Startup iCal Files - Apple Calendar Add Event Dialog BoxBuilding a Startup iCal Files - Apple Calendar Add Event Dialog Box

Asi es como se ve en la vista de día de mi calendario:

Building a Startup iCal Files - Apple Calendar Day View of EventBuilding a Startup iCal Files - Apple Calendar Day View of EventBuilding a Startup iCal Files - Apple Calendar Day View of Event

Una vez que el evento se añade, se verá así al hacer clic en él:

Building a Startup iCal Files - Apple Calendar Right Pane View of EventBuilding a Startup iCal Files - Apple Calendar Right Pane View of EventBuilding a Startup iCal Files - Apple Calendar Right Pane View of Event

En general, la generación de eventos resultó ser una cantidad bastante modesta de trabajo y exitosa en sus implementaciones. Las personas alfa estaban impresionadas, y lo usamos para reuniones reales en persona.

Problemas durante el desarrollo

Mientras estaba aprendiendo sobre .ics y experimentando con él, mis cuentas de webmail en FastMail sólo intermitentemente reconoció mis archivos .ics como invitaciones de calendario. Necesitaba actualizar las propiedades que incluía para que se reconozca de una manera amistosa.

Una estructuración más correcta del contenido del archivo .ics permitió a FastMail reconocer el archivo adjunto automáticamente:

Building a Startup iCal Files - FastMail Recognizing ics File as EventBuilding a Startup iCal Files - FastMail Recognizing ics File as EventBuilding a Startup iCal Files - FastMail Recognizing ics File as Event

Desafortunadamente, el botón Agregar al calendario vincula a su propio calendario, que no utilizo. Una vez más, para agregar a Apple Calendar, como con Gmail, tuve que descargar y abrir el archivo .ics.

Mac OS parecía reconocer los archivos tan pronto como se abrieron. Me dirigiría hacia un par de pasos para crear un evento de Apple Calendar (mostrado arriba).

También necesitaba establecer una identificación única para los eventos para que pudiéramos enviar actualizaciones en el futuro. Por ahora, nuestro ID de reunión de base de datos con '@meetingplanner.io' es suficiente, ejemplo: Uid = 23522@meetingplanner.io.

Garantizar que las zonas horarias se entregaran adecuadamente en formato de archivo .ics requería un poco de investigación adicional. Para simplificar, me baso en el generador de ics de Amin para codificar fechas y horas en formato UTC. Tengo más trabajo en Meeting Planner para gestionar las zonas horarias de los usuarios.

También había dejado de lado la duración y el tiempo de finalización de Meeting Planner. Esto será algo que tengo que remendar pronto, es probable que acaba de añadir una duración (en horas) para la reunión promedio y permitir a las personas ampliarlo según sea necesario.

Problemas futuros

En última instancia, me gustaría Meeting Planner para utilizar una mayor amplitud de la funcionalidad de iCal. Inicialmente, sólo quería que la funcionalidad principal funcionara para el MVP. Aquí hay algunas ideas a continuación.

Es posible que desee crear una configuración de usuario en Meeting Planner que agregue alarmas a las entradas de calendario de las personas. En iCal, esto se denomina VALARM, por ejemplo:

Cuando las personas actualicen el evento original, incluso después de finalizado, quiero actualizar el evento en su calendario. Esto requiere entregar un VEVENT con un UID idéntico pero con una SEQUENCE incremental (via TutorialsBag):

Actualmente, no estoy rastreando un campo secuencial para actualizaciones.

También quiero apoyar los archivos de cancelación que eliminan el evento de los calendarios. Por lo tanto, si una persona cancela con Meeting Planner, enviamos un archivo iCal a los asistentes que elimina el evento de su calendario:

Con el tiempo, me gustaría usar cache en archivos .ics para cada evento y participante para problemas de rendimiento y almacenamiento. Me gustaría proporcionar una gestión de archivos para reducir el espacio en disco necesario para almacenar estos, ya que sólo se necesitan por un corto período de tiempo y se puede regenerar fácilmente a petición.

También quiero asegurar que el directorio en el que están almacenados esté protegido de manera que no puedan ser comprometidos, ya que incluyen mucha información personal y privada, como direcciones de correo electrónico y exactamente donde puede encontrar personas específicas en un momento específico .

En el futuro, también me gustaría intentar integrar las funciones avanzadas menos utilizadas de iCal para conectarse directamente a Meeting Planner. Por ejemplo, podremos cancelar o reprogramar reuniones de su programa de calendario iCal utilizando las interfaces programáticas de Meeting Planner, en lugar de tener que volver al sitio web de Meeting Planner.

¿Que sigue?

Vea los próximos tutoriales en la sección la serie Creando su startup con PHP. En el próximo episodio, describiré cómo agregar soporte para el registro a través de Google, Facebook y Twitter, así como conectar las cuentas existentes a estas redes sociales con el propósito de acelerar la adopción y simplificar el uso.

Una vez más, Meeting Planner está listo para que usted comience a usar. Pruébelo y programe una reunión ahora!

Por favor, no dude en agregar sus preguntas y comentarios a continuación; Trato de participar en las discusiones regularmente. También puede contactarme en Twitter @reifman.

También estoy empezando a experimentar con WeFunder basado en la implementación de las nuevas reglas de crowdfunding de la SEC. Por favor considere seguir nuestro perfil. Puedo escribir sobre esto más como parte de esta serie.

Enlaces relacionados

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.