Добавить события в календарь Google, Yahoo календарь, Outlook и ical - PullRequest
19 голосов
/ 03 марта 2011

Пользователям моего сайта на основе Javascript часто необходимо создать событие, в котором они публикуют имя события, описание события, время начала и время окончания события вместе с датой.Теперь они хотели бы добавить эти подробности о событиях в свой календарь Google, календарь Yahoo, iCal или Outlook. Является ли их стандартная библиотека для этого?Я пытаюсь выяснить это за последние 3 дня, хотя мне известны API Google, но я не знаю ни iCal, ни Outlook, ни даже Yahoo.Я ищу что-то очень похожее на это "http://compute2011.doattend.com/". В правой части вы можете увидеть эту часть" Добавить это на ваш сайт ", я хотел бы сделать то же самое.

Пожалуйста, помогитемне попасть в руки.

Ответы [ 5 ]

12 голосов
/ 06 апреля 2011

Я искал что-то похожее сегодня вечером и нашел этот плагин jQuery, который, похоже, мог бы вам помочь. С его помощью вы можете напрямую создавать файлы .ics "на лету", что должно быть полезно для Google, Outlook, iCal и Yahoo.

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

У меня не было возможности самому проверить это, но я планирую сделать это в ближайшие дни. Однако HTH!

5 голосов
/ 16 мая 2014

Вот то, что я использую в случае, если это кому-нибудь поможет, я использую ASP.NET MVC / C #, но должен дать вам суть того, что требуется для его самостоятельной сборки.

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;
4 голосов
/ 11 октября 2013

Для чисто javascript-решения есть ics.js .Он генерирует файлы ics с использованием исключительно JavaScript.Единственным недостатком является то, что он не поддерживает более старые версии IE.

4 голосов
/ 13 августа 2013

Для тех, кто ищет альтернативы.

http://addthisevent.com/

https://github.com/tardate/jquery.addtocalendar

1 голос
/ 21 мая 2015

Я думаю, что это лучший вариант для этого.Этот плагин может создавать файл .ics из переменных в HTML.

http://addtocalendar.com/

...