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

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直接使用太过分了,在我的情况下可能无论如何都不可用.我在我的谷歌开发者控制台中启用了谷歌日历API,并设置了一个服务帐户,创建/下载了一个json密钥文件(如代码所示).我已将服务帐户邮箱作为共享用户添加到必要的日历中.代码编译并运行,但我只得到"没有要显示的日历事件",因为"项目"为空(日历确实有事件).这里还有什么需要做的吗?如何获取这些日历事件?谢谢

推荐答案

嗯,我终于找到了解决这个问题的方法.我发布的代码是本例所需的全部内容,但它使用了关键字"primary",这不起作用.我不知道为什么,它应该根据谷歌的文件工作.我只是用实际的日历ID(而不是日历名称)和显示的所有事件替换了"primary".????

Go相关问答推荐

如何将泛型函数作为参数传递给golang中的另一个函数?

由docker中的nginx提供的样式和图像在页面上不起作用

转到http服务器头内容-类型设置为多部分/表单-数据,但在客户端获取内容-类型:文本/纯文本

从MySQL/GO表获取行数据

通过渠道和goroutines增值1000倍

在Go中旋转矩阵

在运行时更改 Go lang slog 的日志(log)级别

当我使用 CircleCI 构建 Go Image 时,我得到runtime/cgo: pthread_create failed: Operation not allowed

仅使用公共 api 对 alexedwards/scs 进行简单测试

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

将 struct 转换为 CSV 字符串

Apache Beam 在 Go 中从 PCollection 中 Select 前 N 行

Go 的垃圾收集器在使用时删除 ZeroMQ 套接字

不能使用 mockDB(*MockDB 类型的变量)作为 struct 文字中的 *gorm.DB 值

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

GoReleaser 和 ssh-agent Github 操作:为什么无法读取用户名...终端提示已禁用?

Go 使用 struct 作为接口而不实现所有方法

Go/Golang:如何从 big.Float 中提取最低有效数字?

如何在程序退出时使用 golang 删除文件?

为什么从 Go 1.17 开始在 go.mod 中有两个require块?