Google 文档 - 访问数据

Google docs - access data

我想访问 public google 文档中的数据。

https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0

link 正在工作。

我使用的代码:

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/api/docs/v1"
    "google.golang.org/api/option"
)

var docURL = "https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0"

func main() {
    ctx := context.Background()

    srv, err := docs.NewService(ctx, option.WithoutAuthentication(), option.WithEndpoint(docURL))
    if err != nil {
        log.Fatalf("Unable to retrieve Docs client: %v", err)
    }

    // Prints the title of the requested doc:
    // https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0
    docId := "12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE"
    doc, err := srv.Documents.Get(docId).Do()
    if err != nil {
        log.Fatalf("Unable to retrieve data from document: %v", err)
    }
    fmt.Printf("The title of the doc is: %s\n", doc.Title)
}

它returns404没有找到。我做错了什么?

当我看到您显示 https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0 的 URL 时,它用于 Google 电子表格,而不是 Google 文档。所以在这种情况下,无法使用 Google Docs API 检索此文件。请注意这一点。

当您想从此公开共享的 Google 电子表格中检索值时,进行以下修改如何?在这种情况下,使用 Sheets API v4。请注意这一点。

修改后的脚本:

在当前阶段,如果没有 API 密钥和访问令牌,则无法使用 Sheets API v4。这似乎是当前的规范。所以我认为在你的脚本中,你的 srv 不能用于从 Google 电子表格中检索值,即使它是公开共享的。我认为您当前的问题可能是由于这种情况造成的。在您的情况下,您的电子表格是公开共享的。因此,为了检索值,可以按如下方式使用 API。

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/api/option"
    "google.golang.org/api/sheets/v4"
)

func main() {
    APIkey := "###" // Please set your API key.

    ctx := context.Background()
    srv, err := sheets.NewService(ctx, option.WithAPIKey(APIkey))
    if err != nil {
        log.Fatalf("Unable to retrieve Docs client: %v", err)
    }

    spreadsheetId := "12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE"
    res, err := srv.Spreadsheets.Get(spreadsheetId).Do()
    if err != nil {
        log.Fatalf("Unable to retrieve data from document: %v", err)
    }
    fmt.Printf("The title of the doc is: %s\n", res.Properties.Title)
}

结果:

当此脚本 运行 使用有效的 API 密钥时,将获得以下结果。

The title of the doc is: test

注:

  • 如果你的样本是公开分享的 Google 文档,不幸的是,在当前阶段,Google 文档 API 不能与 API 键一起使用,即使该文档是公开共享的。这似乎是当前的规范。请注意这一点。在这种情况下,请使用访问令牌。示例脚本可以在 here.
  • 中看到

参考: