获取谷歌应用脚​​本中日历活动的链接(网址)

时间:2012-05-11 14:58:19

标签: google-calendar-api google-apps-script

我在Google Apps脚本中有一个Calendar Event,我希望允许用户点击一个Anchor来打开它。 我想我的URL必须如下所示:http://www.google.com/calendar/event?eid=SOMEID&ctz=Etc/GMT。 但是,我似乎无法从日历事件中获取所需的ID。我从Event.getId()获取的ID在这些URL中不起作用,并且没有event.getUrl()。

有人知道这是否可以使用应用脚本?

6 个答案:

答案 0 :(得分:14)

对于CalendarEvent类型和event类型的给定calendarId对象,构建网址以查看/编辑Google Calendar App中相应事件的最简单且有效的方法如下:< / p>

var splitEventId = event.getId().split('@');
var eventURL = "https://www.google.com/calendar/event?eid=" + Utilities.base64Encode(splitEventId[0] + " " + calendarId);

最棒的是,不需要Google API调用,身份验证......!

答案 1 :(得分:1)

新版Google日历打破了这一局面。以下是修复方法:

var mycal = 'username@m'
var splitEventId = event.getId().split('@');
var eventUrl = "https://www.google.com/calendar/event?eid=" + 
Utilities.base64Encode(splitEventId[0] + " " + mycal).toString().replace('=','');

答案 2 :(得分:1)

好的...在2020年,如果有人仍在为此奋斗的情况下,这是该版本的工作版本...

var calendarID = "somec@lend.ar";
var event = CalendarApp.getCalendarById(calendarID).createEvent(/*SOME OPTIONS HERE*/);

var splitEventId = event.getId().split('@');

// Open the "edit event" dialog in Calendar using this URL:
var event_EDIT_URL = "https://calendar.google.com/calendar/r/eventedit/" + Utilities.base64Encode(splitEventId[0] + " " + calendarID).replace("==",'');

// Open the "view this event in a Calendar" using this URL:
var event_VIEW_IN_CAL_URL = "https://www.google.com/calendar/event?eid=" + Utilities.base64Encode(splitEventId[0] + " " + calendarID).replace("==",'');


return event_EDIT_URL; // OR return event_VIEW_IN_CAL_URL;   

答案 3 :(得分:0)

确实不可能。应用程序脚本问题跟踪器上有一个增强请求,提到了这种错误。您可能想要启动它以跟踪更新和投票类型。

Issue 627: GAS for Appointments

答案 4 :(得分:0)

我注意到事件ID有两种类型, 创建一系列事件时,只有一个链接可以传递yyyy/mm/dd的参数,另一个链接将忽略给定的日期,而只是默认为今天的日期。

看看这个日历: https://calendar.google.com/calendar/embed?src=vpaacademy.com_id182o7e82j7f4es5jrefink2g%40group.calendar.google.com&ctz=America%2FNew_York

转到11月,然后单击“计算机类”活动,单击“更多详细信息”,它将带您到: https://calendar.google.com/calendar/r/month/2018/10/29?eid=MWVqMjBjYmFhMGVrMnA3YTB0bGN0ajJjNzhfMjAxODEwMjlUMjMzMDAwWiB2cGFhY2FkZW15LmNvbV9pZDE4Mm83ZTgyajdmNGVzNWpyZWZpbmsyZ0Bn&ctz=America/New_York&sf=true

但是通过获取eid的Bas64可以返回 https://calendar.google.com/calendar/r/month/2018/10/29?eid=MWVqMjBjYmFhMGVrMnA3YTB0bGN0ajJjNzggdnBhYWNhZGVteS5jb21faWQxODJvN2U4Mmo3ZjRlczVqcmVmaW5rMmdAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ= 忽略了传入的日期,我如何获得该ID?

答案 5 :(得分:0)

使用Google日历网络界面为Google日历创建事件时,eventId类似于:

7ik7jal8upcnqu30koq3ctj4tn@google.com

,并可以使用以下内容获取事件的网址:

var calendarId = 'domain.ac.uk_6l495bdvjmo1felggasrvclkc4@group.calendar.google.com';
var eventId = '7ik7jal8upcnqu30koq3ctj4tn@google.com';
var splitEventId = eventId.split('@');
var eventURL = 'https://calendar.google.com/calendar/r/eventedit/' + Utilities.base64Encode(splitEventId[0] + ' ' + calendarId);

//Or for a recurring event
var event = CalendarApp.getCalendarById(calendarId).getEventById(eventId);
var moment = Moment.moment;
var startTime = moment(event.getStartTime()).utc().format('YMMDDTHHmmss')+'Z';
var eventURL = 'https://calendar.google.com/calendar/r/eventedit/' + Utilities.base64Encode(splitEventId[0] + '_' +startTime+ ' ' + calendarId);

不幸的是,相同的方法不适用于在Outlook桌面中创建的同一日历中的事件,而是产生如下的eventId:

040000008200E00074C5B7101A82E00800000000D0E138AFF4C6D501000000000000000010000000C70DD9E87FE9EB46BCE437A98E9CC5BF

因此,解决方案并不完整,但如今使用Outlook桌面的人数减少了。