0

我的 Python (3.6.7) 代码使用 oauth2client 来访问 Google Photos API。它成功地进行了身份验证,但是当它尝试访问 Google 相册时,它似乎使用用户名作为 project_id。

from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

# Setup the Photo v1 API
SCOPES = 'https://www.googleapis.com/auth/photoslibrary.readonly'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('scripts/client_id.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('photoslibrary', 'v1', http=creds.authorize(Http()))

# Call the Photo v1 API
results = service.albums().list(
    pageSize=10, fields="nextPageToken,albums(id,title)").execute()
items = results.get('albums', [])
if not items:
    print('No albums found.')
else:
    print('Albums:')
    for item in items:
        print('{0} ({1})'.format(item['title'].encode('utf8'), item['id']))

执行上述代码时,它会提示我身份验证页面。当我成功进行身份验证时,它向我显示以下错误:

请求 {URL} 时出现 HttpError 403 返回“照片库 API 之前未在项目123456中使用或已禁用。通过访问https://console.developers.google.com/apis/api/photoslibrary.googleapis.com启用它/overview?project= 123456然后重试。如果您最近启用了此 API,请等待几分钟让该操作传播到我们的系统并重试。">

有趣的是,加粗的数字123456(明显变了)实际上是在 client_id.json 中找到的 client_id 的第一部分

但 project_id 看起来像这样:test1-235515

所以我从这个错误中得到的是oauth2client客户端传递的是client_id而不是project_id。因此,即使我启用了 Photos API,它也永远无法正确访问它。

请帮助解决此错误。如何手动更改 project_id?

4

1 回答 1

0

项目 ID 与项目编号不同。您将能够在您的 Google Cloud Console 配置中看到这两者。有关如何识别您的项目的更多信息,请参阅此文档 [1]。

单个 Google Cloud 项目可以配置许多不同的 OAuth 客户端 ID。有关创建 OAuth 客户端凭据 [2] 的信息,请参阅此文档。您只需确保您创建的客户端属于您已启用 API 的项目。转到错误消息中提供的 URL 应该会将您带到正确的配置页面。

[1] https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects

[2] https://support.google.com/cloud/answer/6158849?hl=en

于 2019-03-25T15:56:44.273 回答