Google 驱动器 API 错误 - "message": "Shared drive not found: xyz"
Google Drive API error - "message": "Shared drive not found: xyz"
我正在使用服务帐户连接到我个人 Google 帐户中的共享驱动器。 Google 驱动器 API 总是 returns 一个错误,说找不到共享驱动器。我尝试了这两种方法:
- 为拥有 link
的任何人创建共享驱动器 public
- 使用服务帐户的电子邮件地址为特定用户(服务帐户)添加权限
共享驱动器的 link 格式为 https://drive.google.com/drive/folders/xyz
我假设 driveId 是 link、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))
这里是这个程序在 运行:
时的输出
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Shared drive not found: 1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm",
"locationType": "parameter",
"location": "driveId"
}
],
"code": 404,
"message": "Shared drive not found: 1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm"
}
}
我还在这个 link https://developers.google.com/drive/api/v3/reference/files/list 上尝试了“试试这个 API”工具
它使用的是绑定到我的个人 Google 帐户而不是服务帐户的 OAuth 2.0,但也失败了。
当我看到 https://drive.google.com/drive/folders/1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm
中的样本 URL 时,我认为在这种情况下,它是一个公开共享的文件夹。我认为这可能是您遇到问题的原因。这样的话,下面的修改怎么样?
发件人:
parameters := "?key=" + API_KEY
parameters += "&corpora=drive"
parameters += "&includeItemsFromAllDrives=true"
parameters += "&supportsAllDrives=true"
parameters += "&driveId=" + DRIVE_ID
收件人:
parameters := "?key=" + API_KEY
parameters := "&q=%271dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm%27%20in%20parents"
q
的值为'1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm' in parents
。
- 当您的API密钥是有效密钥时,可以使用此修改。如果发生错误,请用“试试这个API”来测试。 Ref
注:
- 检索共享Drive文件夹的元数据时,
driveId
的值包含在返回值中。当我测试您的文件夹 ID 时,该值未包含在元数据中。所以我认为您的文件夹可能是 Google 云端硬盘的公开共享文件夹,而不是共享云端硬盘。
参考文献:
我正在使用服务帐户连接到我个人 Google 帐户中的共享驱动器。 Google 驱动器 API 总是 returns 一个错误,说找不到共享驱动器。我尝试了这两种方法:
- 为拥有 link 的任何人创建共享驱动器 public
- 使用服务帐户的电子邮件地址为特定用户(服务帐户)添加权限
共享驱动器的 link 格式为 https://drive.google.com/drive/folders/xyz 我假设 driveId 是 link、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))
这里是这个程序在 运行:
时的输出{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Shared drive not found: 1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm",
"locationType": "parameter",
"location": "driveId"
}
],
"code": 404,
"message": "Shared drive not found: 1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm"
}
}
我还在这个 link https://developers.google.com/drive/api/v3/reference/files/list 上尝试了“试试这个 API”工具 它使用的是绑定到我的个人 Google 帐户而不是服务帐户的 OAuth 2.0,但也失败了。
当我看到 https://drive.google.com/drive/folders/1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm
中的样本 URL 时,我认为在这种情况下,它是一个公开共享的文件夹。我认为这可能是您遇到问题的原因。这样的话,下面的修改怎么样?
发件人:
parameters := "?key=" + API_KEY
parameters += "&corpora=drive"
parameters += "&includeItemsFromAllDrives=true"
parameters += "&supportsAllDrives=true"
parameters += "&driveId=" + DRIVE_ID
收件人:
parameters := "?key=" + API_KEY
parameters := "&q=%271dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm%27%20in%20parents"
q
的值为'1dpl28_lhR1myDL2Y2gYKLRX1gNRlWdFm' in parents
。- 当您的API密钥是有效密钥时,可以使用此修改。如果发生错误,请用“试试这个API”来测试。 Ref
注:
- 检索共享Drive文件夹的元数据时,
driveId
的值包含在返回值中。当我测试您的文件夹 ID 时,该值未包含在元数据中。所以我认为您的文件夹可能是 Google 云端硬盘的公开共享文件夹,而不是共享云端硬盘。