英文:
Google docs - access data
问题
我想访问公共谷歌文档中的数据。
链接:https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0
链接有效。
我正在使用的代码:
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("无法获取文档客户端:%v", err)
}
// 打印请求文档的标题:
// 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("无法从文档中检索数据:%v", err)
}
fmt.Printf("文档的标题是:%s\n", doc.Title)
}
它返回404未找到。我做错了什么?
英文:
I want to access the data from public google docs.
https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0
The link is working.
The code I'm using:
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)
}
It returns 404 not found. What I'm doing wrong?
答案1
得分: 1
当我看到你展示的URL https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0
时,它是用于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 := "###" // 请设置您的API密钥。
ctx := context.Background()
srv, err := sheets.NewService(ctx, option.WithAPIKey(APIkey))
if err != nil {
log.Fatalf("无法检索文档客户端:%v", err)
}
spreadsheetId := "12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE"
res, err := srv.Spreadsheets.Get(spreadsheetId).Do()
if err != nil {
log.Fatalf("无法从文档中检索数据:%v", err)
}
fmt.Printf("文档的标题是:%s\n", res.Properties.Title)
}
结果:
当使用有效的API密钥运行此脚本时,将获得以下结果。
文档的标题是:test
注意:
- 如果您的示例是公开共享的Google文档,不幸的是,在当前阶段,即使文档是公开共享的,也无法使用API密钥使用Google Docs API。这似乎是当前的规范。请注意这一点。在这种情况下,请使用访问令牌。可以在这里查看此功能的示例脚本。
参考:
英文:
When I saw your showing URL of https://docs.google.com/spreadsheets/d/12i3Lvwb_14fQES27jVP6baqqmWUXWwM7fZy-neDH3bE/edit#gid=0
, it's for Google Spreadsheet which is not Google Document. So in this case, this file cannot be retrieved using Google Docs API. Please be careful about this.
When you want to retrieve the values from this publicly shared Google Spreadsheet, how about the following modification? In this case, Sheets API v4 is used. Please be careful about this.
Modified script:
In the current stage, Sheets API v4 cannot be used without the API key and the access token. It seems that this is the current specification. So I thought that in your script, your srv
cannot be used for retrieving the values from the Google Spreadsheet even when that is publicly shared. I thought that your current issue might be due to this situation. In your situation, your Spreadsheet is publicly shared. So in order to retrieve the values, the API can be used as follows.
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)
}
Result:
When this script is run using the valid API key, the following result is obtained.
The title of the doc is: test
Note:
- If your sample is the publicly sharead Google Document, unfortunately, in the current stage, Google Docs API cannot be used with the API key even when the Document is publicly shared. It seems that this is the current specification. Please be careful this. In that case, please use the access token. The sample script for this can be seen at here.
Reference:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论