显示验证为服务帐户的谷歌日历事件 - Golang App

在我的 Go 应用程序中,当前作为本地主机在我的开发机器上运行(最终在 Linode 上),我希望简单地显示我自己的 Google 帐户中的日历中的公共 Google 日历事件。目前这只显示到控制台,因为我想让它原则上工作并且我在我的应用程序的索引页面处理程序中有这段代码。


googleCalendar, err := calendar.NewService(r.Context(), option.WithCredentialsFile("./googleAuth.json"))

    if err != nil {

        app.errorLog.Println(w, err)

    }

    

    calEvents, err := googleCalendar.Events.List("primary").TimeMin(time.Now().Format(time.RFC3339)).MaxResults(5).Do()

    if err != nil {

        app.errorLog.Println(err)

    }

    

    if len(calEvents.Items) > 0 {

        for _, i := range calEvents.Items {

            fmt.Fprintln(w, i.Summary, " ", i.Start.DateTime)

        }

    } else {

        app.errorLog.Println("No calendar events to display")

    }

我认为这样做的唯一方法是使用服务帐户,因为我不是 G Workspace (GSuite) 用户(该应用程序最终将在 Linode 上运行),Oauth2 直接是矫枉过正,并且在我的情况下可能无法使用。我在我的 Google Dev Console 中启用了 Google calendar API 并设置了一个服务帐户,创建/下载了一个 json 密钥文件(如代码中所示)。我已将服务帐户电子邮件作为共享用户添加到必要的日历中。代码编译并运行,但我只得到“没有要显示的日历事件”,因为“项目”为空(日历确实有事件)。还有更多需要做的吗?如何获取这些日历事件?谢谢


动漫人物
浏览 48回答 1
1回答

慕的地6264312

好吧,我终于找到了解决这个问题的方法。我发布的代码是在这种情况下所需要的,但它使用的关键字“primary”不起作用。我不知道为什么,它应该根据谷歌文档工作。我只是用实际的日历 ID(不是日历名称)替换了“主要”,并显示了我的所有事件。🙄
打开App,查看更多内容
随时随地看视频慕课网APP