Добавление событий в календарь google, Календарь yahoo, outlook и ical
Пользователям моего сайта на основе Javascript часто требуется создать событие, в котором они публикуют имя события, описание события, время начала и время окончания события вместе с датой. Теперь они хотели бы добавить эти сведения о событиях в свой Календарь Google или календарь Yahoo, iCal или Outlook, есть ли у них какая-либо стандартная библиотека для этого? Я пытаюсь понять это в течение последних 3 дней, хотя я знаю о Google api, но я не знаю об iCal и Outlook или даже Yahoo тоже. Я смотрю для чего-то очень похожего на это " http://compute2011.doattend.com/". в правой части вы можете увидеть эту часть "добавить это на ваш сайт", я хотел бы сделать то же самое.
Пожалуйста, помогите мне попасть в руки.
5 ответов:
Я искал что-то подобное сегодня вечером и нашел этот плагин jQuery, который, кажется, может помочь вам. Вы можете непосредственно генерировать .ics файлы "на лету" с ним, который должен быть хорош для Google, Outlook, iCal и Yahoo.
Хотя у меня не было возможности проверить это самостоятельно, но я планирую сделать это в ближайшие дни. Однако ХТХ!
Вот что я использую, если это кому-то поможет, я использую 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;
Для чистого решения javascript существует ics.js. Он генерирует файлы ics, используя исключительно javascript. Единственным недостатком является то, что он не поддерживает старые версии IE.