Google Drive API 错误 - “消息”:“未找到共享驱动器:xyz”

Jus*_*rry 4 go google-drive-api

我正在使用服务帐户连接到我个人 Google 帐户中的共享云端硬盘。Google Drive API 始终返回错误,指出未找到共享云端硬盘。我尝试了这两个:

  • 向知道该链接的任何人公开共享云端硬盘
  • 使用服务帐户的电子邮件地址为特定用户(服务帐户)添加权限

共享驱动器的链接采用以下格式:https://drive.google.com/drive/folders/xyz ,我假设driveId是链接的最后一部分,xyz?或者这是文件夹ID?如果是这样,我如何找到driveId?

// load the service account credentials
data, err := ioutil.ReadFile("service-account.json")
if err != nil {
    log.Fatal("failed to read json file")
}

// parse the credentials file
conf, err := google.JWTConfigFromJSON(data, drive.DriveReadonlyScope)
if err != nil {
    log.Fatal("failed to parse json file")
}

apiKeyBytes, err := ioutil.ReadFile("api-key.txt")
API_KEY := string(apiKeyBytes)
DRIVE_ID := "1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm"

// send the GET request with all the parameters
client := conf.Client(context.Background())
parameters := "?key=" + API_KEY
parameters += "&corpora=drive"
parameters += "&includeItemsFromAllDrives=true"
parameters += "&supportsAllDrives=true"
parameters += "&driveId=" + DRIVE_ID
response, err := client.Get("https://www.googleapis.com/drive/v3/files" + parameters)

// read and print the response
data_buffer := make([]byte, 2048)
_, err = response.Body.Read(data_buffer)
response.Body.Close()
fmt.Println(string(data_buffer))
Run Code Online (Sandbox Code Playgroud)

这是该程序运行时的输出:

// load the service account credentials
data, err := ioutil.ReadFile("service-account.json")
if err != nil {
    log.Fatal("failed to read json file")
}

// parse the credentials file
conf, err := google.JWTConfigFromJSON(data, drive.DriveReadonlyScope)
if err != nil {
    log.Fatal("failed to parse json file")
}

apiKeyBytes, err := ioutil.ReadFile("api-key.txt")
API_KEY := string(apiKeyBytes)
DRIVE_ID := "1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm"

// send the GET request with all the parameters
client := conf.Client(context.Background())
parameters := "?key=" + API_KEY
parameters += "&corpora=drive"
parameters += "&includeItemsFromAllDrives=true"
parameters += "&supportsAllDrives=true"
parameters += "&driveId=" + DRIVE_ID
response, err := client.Get("https://www.googleapis.com/drive/v3/files" + parameters)

// read and print the response
data_buffer := make([]byte, 2048)
_, err = response.Body.Read(data_buffer)
response.Body.Close()
fmt.Println(string(data_buffer))
Run Code Online (Sandbox Code Playgroud)

我还尝试了此链接https://developers.google.com/drive/api/v3/reference/files/list上的“尝试此 API”工具, 该工具使用与我的个人 Google 帐户而不是服务帐户绑定的 OAuth 2.0 ,这也失败了。

Tan*_*ike 8

当我看到你的示例网址时https://drive.google.com/drive/folders/1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm,我认为在本例中,它是一个公共共享文件夹。我认为这可能是您问题的原因。既然如此,下面的修改如何?

从:

parameters := "?key=" + API_KEY
parameters += "&corpora=drive"
parameters += "&includeItemsFromAllDrives=true"
parameters += "&supportsAllDrives=true"
parameters += "&driveId=" + DRIVE_ID
Run Code Online (Sandbox Code Playgroud)

到:

parameters := "?key=" + API_KEY
parameters := "&q=%271dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm%27%20in%20parents"
Run Code Online (Sandbox Code Playgroud)
  • q的值为'1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm' in parents
  • 当您的API密钥是有效密钥时,可以使用此修改。如果出现错误,请使用“尝试此 API”进行测试。参考号

笔记:

  • 当检索共享云端硬盘的文件夹的元数据时, 的值driveId包含在返回值中。当我测试您的文件夹 ID 时,该值未包含在元数据中。所以我认为你的文件夹可能是Google Drive的公开共享文件夹,而不是共享云端硬盘。

参考: