且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

通过 C# 代码操作 Google 日历

更新时间:2022-08-12 19:10:48

原文:通过 C# 代码操作 Google 日历

本文主题

借助 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
= "contact@cnblogs.com";
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);
}

代码下载

GoogleCalendarDemo.rar