使用Google Golang表格API V4 / Drive API V3获取电子表格ID?

时间:2017-03-22 21:56:57

标签: go google-sheets drive

我正在使用Golang作为我的一个小项目,目前正在尝试根据文件系统路径(在云端硬盘中)和电子表格/工作表名称提取电子表格ID。但是,通过浏览Golang中的API库,我没有看到允许我这样做的功能。

我对这种编程很新,如果这有一个简单的解决方案,请提前抱歉。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在Google的Drive API中使用drive.files.listdrive.files.list可以使用您的Google云端硬盘中的文件夹信息搜索文件。

从你的问题来看,我想了两步。

  1. 使用drive.files.list搜索文件。可以同时检索文件ID和父文件夹ID。在这种情况下,字段是id和parent。

  2. 使用drive.files.get从文件夹ID中检索文件夹名称。该字段是名称。

  3. 您可以使用从每个文件中获取的文件夹信息来创建文件树。

    关于示例脚本,它使用Go Quickstart for Drive API(https://developers.google.com/drive/v3/web/quickstart/go)请将main()的脚本“步骤3:设置示例”更改为以下脚本。

    脚本:

    func main() {
        ctx := context.Background()
    
        b, err := ioutil.ReadFile("client_secret.json")
        if err != nil {
            log.Fatalf("Unable to read client secret file: %v", err)
        }
    
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/drive-go-quickstart.json
        config, err := google.ConfigFromJSON(b, drive.DriveMetadataReadonlyScope)
        if err != nil {
            log.Fatalf("Unable to parse client secret file to config: %v", err)
        }
        client := getClient(ctx, config)
    
        srv, err := drive.New(client)
        if err != nil {
            log.Fatalf("Unable to retrieve drive Client %v", err)
        }
    
        r, err := srv.Files.List().PageSize(10).
            Fields("nextPageToken, files(id, name)").Do()
        if err != nil {
            log.Fatalf("Unable to retrieve files: %v", err)
        }
    
        // From here, it's sample script.
        searchfile := "filename"
        r, err := srv.Files.List().
            Q("name=\"" + searchfile + "\" and trashed=false").Fields("files(id,parents)").Do() // "trashed=false" doesn't search in the trash box.
        if err != nil {
            log.Fatalf("Error: %v", err)
        }
        for _, i := range r.Files {
            r, err := srv.Files.Get(i.Parents[0]).Fields("name").Do()
            if err != nil {
                log.Fatalf("Error: %v", err)
            }
            fmt.Printf("FileID=%s, FolderID=%s, FolderName=%s\n", i.Id, i.Parents[0], r.Name)
        }
    }
    

    结果:

    FileID=#####, FolderID=#####, FolderName=#####
    

    Google云端硬盘上的文件可以包含多个父文件夹。在此脚本中,它假定每个文件都有一个父文件夹。如果您的文件有多个父文件夹,请从父数组中检索其文件夹。

    参考文献:

    drive.files.list https://developers.google.com/drive/v3/reference/files/list

    drive.files.get https://developers.google.com/drive/v3/reference/files/get

    Go API的快速入门 https://developers.google.com/drive/v3/web/quickstart/go

    对不起我的英语很差。