web-dev-qa-db-fra.com

Ajouter des événements aux calendriers Google, Yahoo, Outlook et ical

Les utilisateurs de mon site basé sur Javascript doivent souvent créer un événement dans lequel ils publient un nom, une description, l’heure de début et l’heure de fin de l’événement, ainsi que la date. Maintenant, ils aimeraient ajouter les détails de ces événements à leur agenda Google, Yahoo, iCal ou Outlook. Existe-t-il une bibliothèque standard pour cela? J'essaie de comprendre cela depuis 3 jours bien que je sois au courant de Google Api mais je ne suis pas au courant d'iCal et d'Outlook ou même de Yahoo aussi. Je cherche quelque chose de très similaire " http://compute2011.doattend.com/ ". Dans la partie droite, vous pouvez voir la partie "Ajouter ceci à votre site", j'aimerais faire la même chose.

S'il vous plaît aidez-moi à entrer dans les mains.

19
Jeevan Dongre

Je cherchais quelque chose de similaire ce soir et ai trouvé ce plugin jQuery qui semble pouvoir vous aider. Vous pouvez générer directement des fichiers .ics "à la volée", ce qui devrait convenir à Google, Outlook, iCal et Yahoo.

http://keith-wood.name/icalendar.html

Je n'ai toutefois pas eu l'occasion de le tester moi-même, mais prévoyez le faire dans les prochains jours. Cependant HTH!

12
Zalakain

Voici ce que j'utilise au cas où cela aiderait quelqu'un. J'utilise ASP.NET MVC/C # mais je devrais vous donner l'essentiel de ce qui est nécessaire pour le construire vous-même.

Outlook & iCal:

var icsUrl = '/todos/geticsfile/' + id;

public ActionResult GetIcsFile(string id) {
            var user = UserService.Get(UserId);
            var todo = ToDoService.Get(id);
            var content = GetOutlookFileContents(user, todo);
            var bytes = Encoding.UTF8.GetBytes(content);
            return File(bytes, "text/calendar", "housters-todo.ics");
        }

public static string GetOutlookFileContents(User user, ToDo todo) {
            var builder = new StringBuilder();

            builder.AppendLine("BEGIN:VCALENDAR");
            builder.AppendLine("METHOD:REQUEST");
            builder.AppendLine("PRODID:Microsoft Exchange Server 2010");
            builder.AppendLine("VERSION:2.0");
            builder.AppendLine("BEGIN:VTIMEZONE");
            builder.AppendLine("TZID:Eastern Standard Time");
            builder.AppendLine("BEGIN:STANDARD");
            builder.AppendLine("DTSTART:16010101T020000");
            builder.AppendLine("TZOFFSETFROM:-0700");
            builder.AppendLine("TZOFFSETTO:-0800");
            builder.AppendLine("RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11");
            builder.AppendLine("END:STANDARD");
            builder.AppendLine("BEGIN:DAYLIGHT");
            builder.AppendLine("DTSTART:16010101T020000");
            builder.AppendLine("TZOFFSETFROM:-0800");
            builder.AppendLine("TZOFFSETTO:-0700");
            builder.AppendLine("RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3");
            builder.AppendLine("END:DAYLIGHT");
            builder.AppendLine("END:VTIMEZONE");
            builder.AppendLine("BEGIN:VEVENT");
            builder.AppendLine("ORGANIZER;CN=" + user.Name + ":MAILTO:" + user.EmailAddress);
            builder.AppendLine("ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=" + user.EmailAddress + ":MAILTO:" + user.EmailAddress);
            builder.AppendLine("DESCRIPTION;LANGUAGE=en-US:" + todo.Task);
            builder.AppendLine("SUMMARY;LANGUAGE=en-US:" + todo.TitleOrTask);
            builder.AppendLine("DTSTART;TZID=Eastern Standard Time:" + todo.DueDate.Value.ToString("yyyyMMdd"));
            builder.AppendLine("DTEND;TZID=Eastern Standard Time:" + todo.DueDate.Value.ToString("yyyyMMdd"));
            builder.AppendLine("UID:" + Guid.NewGuid().ToString());
            builder.AppendLine("CLASS:PUBLIC");
            builder.AppendLine("PRIORITY:5");
            builder.AppendLine("DTSTAMP:" + todo.DueDate.Value.ToString("yyyyMMdd") + "T023422Z");
            builder.AppendLine("TRANSP:OPAQUE");
            builder.AppendLine("STATUS:CONFIRMED");
            builder.AppendLine("SEQUENCE:0");
            if(todo.PropertyId != null) {
                var property = PropertyService.Get(todo.PropertyId);
                builder.AppendLine("LOCATION;LANGUAGE=en-US:" + property.FullAddress);
            }
            else {
                builder.AppendLine("LOCATION;LANGUAGE=en-US:Unknown");
            }
            builder.AppendLine("X-Microsoft-CDO-APPT-SEQUENCE:0");
            builder.AppendLine("X-Microsoft-CDO-OWNERAPPTID:2112076272");
            builder.AppendLine("X-Microsoft-CDO-BUSYSTATUS:TENTATIVE");
            builder.AppendLine("X-Microsoft-CDO-INTENDEDSTATUS:BUSY");
            builder.AppendLine("X-Microsoft-CDO-ALLDAYEVENT:FALSE");
            builder.AppendLine("X-Microsoft-CDO-IMPORTANCE:1");
            builder.AppendLine("X-Microsoft-CDO-INSTTYPE:0");
            builder.AppendLine("X-Microsoft-DISALLOW-COUNTER:FALSE");
            builder.AppendLine("BEGIN:VALARM");
            builder.AppendLine("ACTION:DISPLAY");
            builder.AppendLine("DESCRIPTION:REMINDER");
            builder.AppendLine("TRIGGER;RELATED=START:-PT15M");
            builder.AppendLine("END:VALARM");
            builder.AppendLine("END:VEVENT");
            builder.AppendLine("END:VCALENDAR");

            return builder.ToString();
        }

Google:

var text = encodeURIComponent('Housters To-Do Due: ' + self.task());
            var startDate = moment(self.dueDate()).format('YYYYMMDD');
            var endDate = moment(self.dueDate()).add('days', 1).format('YYYYMMDD');
            var details = encodeURIComponent(self.task());
            var location = encodeURIComponent(self.propertyName());
            var googleCalendarUrl = 'http://www.google.com/calendar/event?action=TEMPLATE&text=' + text + '&dates=' + startDate + '/' + endDate + '&details=' + details + '&location=' + location;
5
Justin

Pour une solution javascript pure, il existe ics.js. Il génère des fichiers ics en utilisant uniquement JavaScript. Le seul inconvénient est qu'il ne supporte pas les anciennes versions d'IE.

4
InsanelyADHD
4
Praveen Vijayan

Je pense que c'est la meilleure option pour le faire. Ce plugin peut créer un fichier .ics à partir de variables en HTML.

http://addtocalendar.com/

1
RicardoGonzales