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

Google API v3 - can't get list of calendars

我正在尝试将活动添加到我的日历中。

我在 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 );

默认情况下,您使用的是服务帐户服务帐户没有任何 Google 日历。您要么需要添加一个,要么让它访问您的一个。

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

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

您可能想要授予它权限"make changes to events"

提示

您只需要 CalendarService.Scope.Calendar 即可获得完全访问权限。您可以删除 CalendarService.Scope.CalendarReadonly 确实没有理由同时拥有两者。