无法使用 API 'https://www.googleapis.com/drive/v3/files/<file_id>/export?mimeType=image%2Fjpeg' 从 google 驱动器获取图像

Cannot use API 'https://www.googleapis.com/drive/v3/files/<file_id>/export?mimeType=image%2Fjpeg' to get image from google drive

我的问题是在使用 'https://www.googleapis.com/drive/v3/files/<file_id>/export?mimeType=image%2Fjpeg'

时无法在 google 驱动器上获取图像

在这里,我的代码:

from pydrive import auth, drive
import requests

gauth = auth.GoogleAuth()
scope = ["https://www.googleapis.com/auth/drive"]
gauth.credentials = auth.ServiceAccountCredentials.from_json_keyfile_name('my_json.json', scope)
drv = drive.GoogleDrive(gauth)
access_token = drv.auth.credentials.get_access_token().access_token
url = 'https://www.googleapis.com/drive/v3/files/' + file_id + '/export?mimeType=image%2Fjpeg'
res = requests.get(url, headers={'Authorization': 'Bearer ' + access_token})

响应错误 (403):

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
}

我只请求了 10-20 次。这个错误响应似乎是错误的。

我如何修复以上代码以获得响应?

在此先感谢您的帮助!

我相信你的目标如下。

  • My original file is *.jpg. I used mimeType=image/jpeg 和您的脚本中,您想使用服务帐户从 Google 驱动器下载 JPEG 文件。

修改点:

  • 当您要下载JPEG文件时,我认为您的端点需要修改。
  • 我认为当端点没有使用访问令牌时,会出现Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.的错误。但是,当使用无效的访问令牌时,会发生 Invalid Credentials 错误。在您的脚本中,即使访问令牌无效,我认为也不会发生 Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup. 错误。所以我担心您的展示脚本可能与您测试的脚本不同。请再次确认。

如果使用服务帐户从Google驱动器下载JPEG文件,下面的修改如何?

修改后的脚本:

from pydrive import auth, drive
import requests

file_id = "###"  # Please set the file ID of the JPEG file.

gauth = auth.GoogleAuth()
scope = ["https://www.googleapis.com/auth/drive"]
gauth.credentials = auth.ServiceAccountCredentials.from_json_keyfile_name('my_json.json', scope)
drv = drive.GoogleDrive(gauth)
access_token = drv.auth.credentials.get_access_token().access_token
url = "https://www.googleapis.com/drive/v3/files/" + file_id + "?alt=media"
res = requests.get(url, headers={"Authorization": "Bearer " + access_token})

注:

  • 在这种情况下,假设您的服务帐户可以访问 Google Drive 上的 JPEG 文件。请注意这一点。如果出现类似File not found的错误,请再次检查。

  • 比如你想用pydrive下载一个JPEG文件,也可以用下面的脚本

      from pydrive import auth, drive
      import requests
    
      file_id = "###"  # Please set the file ID of the JPEG file.
    
      gauth = auth.GoogleAuth()
      scope = ["https://www.googleapis.com/auth/drive"]
      gauth.credentials = auth.ServiceAccountCredentials.from_json_keyfile_name('my_json.json', scope)
      drv = drive.GoogleDrive(gauth)
      drv.CreateFile({"id": file_id}).GetContentFile("sample.jpg")
    

参考文献: