Google_Drive_API_comments_error

Google_Drive_API_comments_error

下午好。我正在尝试编写一个函数来读取 google 驱动器中 jpg 文件的注释。但是,当我尝试 运行 它给了我以下错误:

发生错误:

<HttpError 403 when requesting https://www.googleapis.com/drive/v2/files/1SbB4VwCIhaS9mdJ_xqcyjenZfxxrpTsY/comments?alt=json returned "Insufficient Permission: Request had insufficient authentication scopes.". Details: "[{'domain': 'global', 'reason': 'insufficientPermissions', 'message': 'Insufficient Permission: Request had insufficient authentication scopes.'}]">

def retrieve_comments(service, file_id):
  """Retrieve a list of comments.

  Args:
    service: Drive API service instance.
    file_id: ID of the file to retrieve comments for.
  Returns:
    List of comments.
  """

  try:
    comments = service.comments().list(fileId=file_id).execute()
    return comments.get('items', [])
  except errors.HttpError as error:
    print('An error occurred: %s' % error)
  return None

SCOPES = ['https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.file', ]
credentials = Credentials.from_authorized_user_file('token.json', SCOPES)

service = build('drive', 'v2', credentials=credentials)
print(retrieve_comments(service, '1SbB4VwCIhaS9mdJ_xqcyjenZfxxrpTsY'))

更新:这是我的 token.json 文件的样子:

{"token": "ya29.a0ARrdaM-lbQRcrOHcWXHXVCZ--FHEBFmhetZy5mtKyE-KYg7kkqc7DCB3ELoGWm7DSFFqZ5n7MZ2qtpomhhhh3YjyPlDmFNiBFqW8jfzQcq2bUboJVHWly7w5KajgYBW6vXfpUG7XB-NiSRIGbgGXg7pADS9E", "refresh_token": "1//03RuSdM4_a83LCgYIARAAGAMSNwF-L9Ir99uSssRC7-EDBGOchESXQuY8uQh3BIAUSnUFmT60dipjtvqGslz9wyAl_OnLkoLWdko", "token_uri ": "https://oauth2.googleapis.com/token", "client_id": "936594993582-hm55manlg9g4hkdeeisq6i4ogqk6are2.apps.googleusercontent.com", "client_secret": "irvWegrf57dztuP6_OigoGIT", "范围": ["https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.文件"], "过期": "2021-08-19T12:26:14.658525Z"}

这就是我的代码的样子。知道为什么会发生这种情况以及我可以做些什么来解决它吗?

编辑:对于 运行 遇到相同问题的任何人,请记住快速入门中的范围必须与 python 文件中的范围相同。

Insufficient Permission

表示与您进行身份验证的用户无权执行您正在尝试执行的操作,或者该用户未授予您的应用程序权限。

您正在尝试使用comments.list此方法要求您已获得以下范围之一的授权

现在您似乎正在使用以下范围

'https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.file',

我不确定你为什么 drive.file 两次,但我们暂时忽略它。

如您所见,您似乎正在使用此端点所需的正确范围。我怀疑发生的事情是您已经授权用户使用一组不同的范围,然后您更改了应用程序中的范围。当您更改范围时,您需要确保您已撤销用户在您的应用程序中的访问权限,并提示用户再次授权您的应用程序。您可能 运行 使用具有旧范围的存储访问令牌和/或刷新令牌。

解决方案是简单地强制您的应用程序再次授权您的用户,确保弹出同意屏幕。