Добавление событий в календарь Google, календарь yahoo, прогноз и ical
Пользователям моего сайта на основе Javascript часто необходимо создать событие, в котором они отправляют имя события, описание события, время начала и время окончания события вместе с датой. Теперь они хотели бы добавить эти сведения о событиях в свой календарь Google или календарь Yahoo или iCal или Outlook, является ли их стандартной библиотекой для этого? Я пытаюсь понять это в течение последних 3 дней, хотя я знаю о google api, но я не знаю iCal и Outlook или даже Yahoo. Я ищу что-то очень похожее " http://compute2011.doattend.com/". В правой части вы можете увидеть эту часть "Добавить на свой сайт", я хотел бы сделать то же самое.
Пожалуйста, помогите мне попасть в руки.
Ответы
Ответ 1
Я искал что-то подобное сегодня и нашел этот плагин jQuery, который, кажется, может помочь вам. Вы можете напрямую генерировать файлы .ics "на лету", которые должны быть хорошими для Google, Outlook, iCal и Yahoo.
http://keith-wood.name/icalendar.html
У меня не было возможности проверить это сам, но планируйте сделать это в ближайшие дни. Однако HTH!
Ответ 2
Вот что я использую, если он помогает кому-либо, я использую ASP.NET MVC/С#, но должен дать вам суть того, что необходимо для его создания.
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;
Ответ 3
Для тех, кто ищет альтернативы.
http://addthisevent.com/
https://github.com/tardate/jquery.addtocalendar
Ответ 4
Для чистого javascript-решения существует ics.js. Он генерирует файлы ics, используя только javascript. Единственным недостатком является то, что он не поддерживает более старые версии IE.
Ответ 5
Я думаю, что это лучший вариант для этого. Этот плагин может создать файл .ics из переменных на html.
http://addtocalendar.com/
Ответ 6
Я использую [ https://github.com/sendlo/AddCalEvent/blob/master/src/AddCalEvent.js] для добавления события календаря. Все функции работают великолепно, но с онлайн-прогнозом я просто попадаю на страницу календаря, но без нового всплывающего окна с предварительно заполненными данными, переданными по ссылке ics.
Однако он напрямую открывает новое всплывающее окно событий с gmail и Yahoo.
Я чувствую, что эта ссылка (http://calendar.live.com/calendar/calendar.aspx?rru=addevent) была обновлена, но не может найти новую ссылку
_getUrl_hotmail: function() {
var data = this.options.data,
url = 'http://calendar.live.com/calendar/calendar.aspx?rru=addevent';
url += '&summary=' + encodeURIComponent(data.title);
url += '&location=' + encodeURIComponent(data.location);
url += '&dtstart=' + this._getUTCTime(data.timeObj.start);
url += '&dtend=' + this._getUTCTime(data.timeObj.end);
url += '&description=' + encodeURIComponent(data.desc);
return url;
},