Google API v3 - 无法获取日历列表

时间:2015-11-02 09:02:44

标签: c# google-api google-calendar-api google-api-dotnet-client service-accounts

我试图将事件添加到我的日历中。

我在Google Developers Console中创建了服务帐户凭据,我可以自行授权。

我的帐户中有两个日历,但我无法使用c#代码将其列为google API。

我的日历需要一些特殊权限吗? 在设置(calendar.google.com)标签上,我拥有完整权限。 可能是代码获取日历列表有问题吗?

 string[] scopesCal = new string[] { CalendarService.Scope.Calendar, // Manage your calendars
                                              CalendarService.Scope.CalendarReadonly, // View your Calendars
                                             };

         var certificate = new X509Certificate2( @"GigaNetLibGoogleXCalendar.p12", "notasecret", X509KeyStorageFlags.Exportable );

         ServiceAccountCredential credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer( ServiceAccountEmail ) {
               Scopes = scopesCal
            }.FromCertificate( certificate ) );

         // Create the service.
         CalSrv = new CalendarService( new BaseClientService.Initializer() {
            HttpClientInitializer = credential,
            ApplicationName = "XCalendar",
         } );

         var calendars = CalSrv.CalendarList.List().Execute().Items;
         foreach ( CalendarListEntry entry in calendars )
            Console.WriteLine( entry.Summary + " - " + entry.Id );

1 个答案:

答案 0 :(得分:2)

您默认使用服务帐户,服务帐户没有任何Google日历。您需要添加一个或授予其中一个访问权限。

获取服务帐户电子邮件地址,并将其作为用户添加到您希望其能够访问的帐户的日历上。

转到Google日历网站。找到“日历设置”,然后转到“日历”标签,找到要访问的日历,然后单击“共享:编辑设置”,添加服务帐户电子邮件地址,就像添加个人电子邮件地址一样。这将为服务帐户提供与您与任何其他用户共享访问权限相同的访问权限。

您可能希望授予其权限"make changes to events"

提示

您只需要CalendarService.Scope.Calendar即可获得完全访问权限。你可以删除CalendarService.Scope.CalendarReadonly,实际上没有理由同时拥有它们。