本文主题
借助 Google .NET APIs Client Library,通过 C# 代码在 Google 日历中创建会议邀请。
本文背景
最近,Google 发布了 .NET APIs Client Library,终于可以方便地通过 .NET/C# 代码调用 Google 的 API。
而我们正好有这个需求,所以小试了一下。需求是这样的:通过调用 Google Calendar 的 API,自动创建每周例会的 Google 日历活动,邀请并通知参会者,被邀请者可以修改该日历项。以前这个操作是人工在 Google 日历的 Web 页面上完成的。
准备工作
1. 下载并安装 Google Data API SDK,主要用于引用其中的三个程序集。该 SDK 中也包含 Google .NET APIs Client Library 的源代码,正是由于有了源代码,我们在使用中遇到的问题才得以快速解决。
2. 阅读参考文档与示例代码 Data API Developer‘s Guide: .NET,重点查看 Creating single-occurrence events(我们的任务就是创建一个日历项)。示例代码只是创建一个包含标题、内容、地点、时间的简历日历项,而我们的需求还包括:a) 邀请参会者(Participants);b) 通知参会者(Notifications);c) 被邀请者可以修改该日历项(GuestsCanModify)。
所遇问题
Google .NET APIs Client Library 没有实现 gCal:guestsCanModify 属性(设置这个属性可以让被邀请者修改日历项),后来我们参照 .NET APIs Client Library 的源代码自己实现了一个,代码如下:
public class GuestsCanModify : EnumConstruct{ public GuestsCanModify() : base("guestsCanModify", GDataParserNameTable.gCalPrefix, GDataParserNameTable.NSGCal) { } public GuestsCanModify(string value) : base("guestsCanModify", GDataParserNameTable.gCalPrefix, GDataParserNameTable.NSGCal, value) { }}
代码实现
在VS2010中新建一个项目,并添加三个引用:"Google.GData.Extensions.dll", "Google.GData.Calendar.dll", "Google.GData.Client.dll"。
创建会议邀请日历项的代码如下:
public void CreateCalendarEvent(){ CalendarService calendarService = new CalendarService("CNBlogsMeeting"); calendarService.setUserCredentials("Google登录用户名", "密码"); EventEntry entry = new EventEntry(); //日历标题与内容 entry.Title.Text = "博客园周会通知标题"; entry.Content.Content = "博客园周会通知内容"; //开始与结束时间,17:00~18:00 When eventTime = new When(DateTime.Now.Date.AddHours(17), DateTime.Now.Date.AddHours(18)); entry.Times.Add(eventTime); //需要邀请的参会者 Who who = new Who(); who.Email = "[email protected]"; who.Rel = "http://schemas.google.com/g/2005#event.attendee"; entry.Participants.Add(who); //给被邀请者发送通知 entry.Notifications = true; //被邀请者可以修改该日历项 entry.ExtensionElements.Add(new GuestsCanModify("true")); Uri postUri = new Uri("ttps://www.google.com/calendar/feeds/default/private/full"); AtomEntry insertEntry = calendarService.Insert(postUri, entry); Assert.NotNull(insertEntry);}
代码下载