2010-01-28 2 views
7

Я строю webapp, который управляет определенными типами событий для пользователей. Я хочу предоставить способ отображения этих событий внутри календаря Google.Как опубликовать динамический канал событий для календаря Google?

На самом деле я надеялся, что вы сможете опубликовать мой собственный календарь, совместимый с Google Calendar, и разрешить пользователям подписываться на него, так как они могут подписаться на «интересные календари». Чтобы изменения событий или добавления новых событий отражались в их календаре. Но похоже, что Google только позволяет пользователям импортировать данные календаря в формате ical или csv, а не в формат подачи Atom.

Проблема заключается в том, что существующие события в моем webapp могут меняться и новые события добавляются. Я хочу, чтобы эти изменения немедленно отражались в календаре Google. И я не могу ожидать, что пользователь сохранит реимпорт файла ICAL. Следующий вопрос SO очень схож, но на самом деле нет ответа: Generate a Google Calendar compatible feed

Неужели я об этом не так? Нужно ли использовать API gdata для создания календаря и публикации событий? Кажется, что публикация Atom-канала будет намного проще, но если Google не сможет подписаться на Atom-канал, это не сработает.

Если я просто публикую свои события в виде файла ICAL, будет ли календарь Google перечитывать URL-адрес регулярно и обновлять данные? У некоторых пользователей у меня есть 4 или 5 событий в день, поэтому с течением времени файл будет становиться все больше и больше. Кажется, это нехорошее решение.

ответ

6

Рассматривая другие сайты, которые делают это, кажется, что google регулярно перечитывает внешние календари в обычном формате.

Это зависит от вас, чтобы обрезать фид, который вы предоставляете, например, убивая даты в прошлом.

Итак, чтобы решить вашу проблему:

  • генерируют скую файл и служить из вашего веб-сайта
  • получить ваши пользователи, чтобы подписаться на него в Google Calendar
  • регулярно обновлять скую файл, обрезка старых данные

Пример заголовки & начало мик файл из TripIt.com, где это, кажется, работает хорошо:

curl -v http://..../tripit.ics 

< HTTP/1.1 200 OK 
< Server: nginx 
< Date: Fri, 29 Jan 2010 21:53:58 GMT 
< Content-Type: text/calendar; charset=utf-8 
< Transfer-Encoding: chunked 
< Connection: close 
< Expires: Fri, 29 Jan 2010 22:08:58 GMT 
< Cache-Control: private 
< 
BEGIN:VCALENDAR 
X-WR-CALNAME:Malcolm Box (TripIt) 
X-WR-CALDESC:TripIt Calendar 
X-PUBLISHED-TTL:PT15M 
PRODID:-//John Papaioannou/NONSGML Bennu 0.1//EN 
VERSION:2.0 
BEGIN:VEVENT 
... 
+0

Спасибо, но в соответствии с этой должности, Google не надежно обновить из URL: http://www.google.com/support/forum/p/Calendar/thread?tid=3fad85f47a70864b&hl=en Do у вас есть примеры сайтов, которые публикуют в стандартном формате, которые работают надежно? – Tauren

+1

Я только что попробовал это с TripIt - получил ссылку webcal: // (в файл ics), добавив ее в Google. Затем добавили другое событие на tripit.com, вернулись в Google, и это было немедленно показано. –

+0

Спасибо, Малкольм! Это выглядит очень многообещающе. Я надеялся предоставить только фид ics для поддержки календарей Google, iphone, ical, outlook и т. Д. Если он работает на трип, тогда я тоже смогу заставить его работать. – Tauren

0

Похоже, надежно обновлять календарь Google вы должны использовать API: http://code.google.com/apis/calendar/data/2.0/developers_guide.html хотя я готов поспорить с прагматической точки зрения, если у вас есть файл, который скую обновляющий достаточно часто, вы получите достойную производительность ,

+0

Aerik, я согласен - использование gdata API, вероятно, является самым надежным способом. Но это не поможет iPhone, iCal, Outlook и другим пользователям. В конце концов, я могу пойти с gdata, но если фид ics можно надежно использовать в google, я сначала попробую. – Tauren

2

Пользователи iCal, по крайней мере, могут подписаться непосредственно на файл ics. Я нахожу, что iCal показывает мои обновления в течение 20 минут или около того, и даже эта задержка, о которой я предполагаю, связана с тем, что календарь, который я использую (JEvents), только так часто обновляет файл ics.

В Google Календаре есть часы, чтобы показать свои изменения - даже если я отпишусь и создаю новую подписку на тот же URL-адрес, я вижу события, которые были удалены давно.

Смежные вопросы