Python 3.x 使用Google API客户端defaut credentails创建Blogger API终结点时出错

Python 3.x 使用Google API客户端defaut credentails创建Blogger API终结点时出错,python-3.x,google-cloud-functions,blogger,google-api-python-client,Python 3.x,Google Cloud Functions,Blogger,Google Api Python Client,我试图在谷歌云函数中创建一个BloggerAPI服务对象。我参考了(获取计算引擎、Kubernetes引擎、AppEngine灵活环境和云功能的凭据部分)中的示例 给出的示例是针对Google Starage的。我正在尝试将其转换为博客API的Google API客户端。我找不到有关如何使用此默认凭据创建Blogger API服务对象的文档。我试图重用来自的代码 我尝试了以下代码,但出现了错误。我知道这是错误的,但我没有关于如何使用此凭证的文档 from google.auth import c

我试图在谷歌云函数中创建一个BloggerAPI服务对象。我参考了(获取计算引擎、Kubernetes引擎、AppEngine灵活环境和云功能的凭据部分)中的示例

给出的示例是针对Google Starage的。我正在尝试将其转换为博客API的Google API客户端。我找不到有关如何使用此默认凭据创建Blogger API服务对象的文档。我试图重用来自的代码

我尝试了以下代码,但出现了错误。我知道这是错误的,但我没有关于如何使用此凭证的文档

from google.auth import compute_engine
import googleapiclient.discovery

credentials = compute_engine.Credentials()
print(type(credentials))

blogger = googleapiclient.discovery.build('blogger', 'v3', credentials=credentials)
print(blogger)
我得到以下错误:

E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam Traceback (most recent call last): TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam   File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 33, in <module> TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam     from oauth2client.contrib.locked_file import LockedFile TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam ModuleNotFoundError: No module named 'oauth2client' TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam  TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam During handling of the above exception, another exception occurred: TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam  TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam Traceback (most recent call last): TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam   File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 37, in <module> TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam     from oauth2client.locked_file import LockedFile TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam ModuleNotFoundError: No module named 'oauth2client' TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam  TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam During handling of the above exception, another exception occurred: TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam  TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam Traceback (most recent call last): TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam   File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/__init__.py", line 41, in autodetect TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam     from . import file_cache TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam   File "/env/local/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 41, in <module> TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam     'file_cache is unavailable when using oauth2client >= 4.0.0 or google-auth') TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam ImportError: file_cache is unavailable when using oauth2client >= 4.0.0 or google-auth TestHTTPFunction h8log1bk5kam 
I 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam URL being requested: GET https://www.googleapis.com/discovery/v1/apis/blogger/v3/rest TestHTTPFunction h8log1bk5kam 
I 2020-01-01T20:16:08.723Z TestHTTPFunction h8log1bk5kam <googleapiclient.discovery.Resource object at 0x7ec9066c9710> TestHTTPFunction h8log1bk5kam 
I 2020-01-01T20:16:08.724Z TestHTTPFunction h8log1bk5kam URL being requested: GET https://www.googleapis.com/blogger/v3/blogs/2709229652340798222?maxPosts=2&alt=json TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.752Z TestHTTPFunction h8log1bk5kam Encountered 403 Forbidden with reason "insufficientPermissions" TestHTTPFunction h8log1bk5kam 
E 2020-01-01T20:16:08.656Z TestHttp函数h8log1bk5kam回溯(最后一次调用):TestHttp函数h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHtpFunction h8log1bk5kam文件“/env/local/lib/python3.7/site packages/GoogleAppClient/discovery_cache/File_cache.py”,第33行,在TestHtpFunction h8log1bk5kam中
E 2020-01-01T20:16:08.656Z从oauth2client.contrib.locked_文件导入锁定文件TestH8Log1Bk5kam测试h8log1bk5kam功能
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam ModuleNotFound错误:没有名为“oauth2client”的模块测试HTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam测试HTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam在处理上述异常期间,发生了另一个异常:TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam测试HTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam回溯(最后一次调用):TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHtpFunction h8log1bk5kam文件“/env/local/lib/python3.7/site packages/GoogleAppClient/discovery_cache/File_cache.py”,第37行,在TestHtpFunction h8log1bk5kam中
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam来自oauth2client.locked_文件导入LockedFile TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam ModuleNotFound错误:没有名为“oauth2client”的模块测试HTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam测试HTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam在处理上述异常期间,发生了另一个异常:TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam测试HTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam回溯(最后一次调用):TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam文件“/env/local/lib/python3.7/site packages/GoogleAppClient/discovery_cache/_uuinit_U5;.py”,自动检测测试h8log1bk5kam函数第41行
E 2020-01-01T20:16:08.656Z测试HTTPFunction h8log1bk5kam从。导入文件_缓存测试h8log1bk5kam函数h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHtpFunction h8log1bk5kam文件“/env/local/lib/python3.7/site packages/GoogleAppClient/discovery_cache/File_cache.py”,第41行,在TestHtpFunction h8log1bk5kam中
E 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam“使用oauth2client>=4.0.0或google auth时,文件缓存不可用”)TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.656Z TestHttp函数h8log1bk5kam导入错误:当使用oauth2client>=4.0.0或google auth TestHttp函数h8log1bk5kam时,文件缓存不可用
I 2020-01-01T20:16:08.656Z TestHTTPFunction h8log1bk5kam请求的URL:获取https://www.googleapis.com/discovery/v1/apis/blogger/v3/rest TestHTTPFunction h8log1bk5kam
I 2020-01-01T20:16:08.723Z测试HTTPFunction h8log1bk5kam测试HTTPFunction h8log1bk5kam
I 2020-01-01T20:16:08.724Z TestHTTPFunction h8log1bk5kam请求的URL:获取https://www.googleapis.com/blogger/v3/blogs/2709229652340798222?maxPosts=2&alt=json TestHTTPFunction h8log1bk5kam
E 2020-01-01T20:16:08.752Z测试HTTPFunction h8log1bk5kam遇到403禁止,原因是“权限不足”测试HTTPFunction h8log1bk5kam

到目前为止,我看到的问题是,您正在使用Google Compute Engine的客户端库(连接到GCP虚拟机),但您希望连接到Blogger

是一个如何使用正确的客户端库连接到Blogger的示例

管理凭据的方法是使用具有以下结构的credential.json文件:


{
  "web": {
    "client_id": "[[INSERT CLIENT ID HERE]]",
    "client_secret": "[[INSERT CLIENT SECRET HERE]]",
    "redirect_uris": [],
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://accounts.google.com/o/oauth2/token"
  }
}
在您的Python代码中,有以下内容:

import sys

from oauth2client import client
from googleapiclient import sample_tools


def main(argv):
  # Authenticate and construct service.
  service, flags = sample_tools.init(
      argv, 'blogger', 'v3', __doc__, __file__,
      scope='https://www.googleapis.com/auth/blogger')
  try:
      users = service.users()
      thisuser = users.get(userId='self').execute()

这个答案假设API调用是通过服务器或桌面进行的。我的问题是通过一个谷歌云函数来使用API,在这个函数中不能存储文件。给出的示例适用于Google存储API。我正试图为Blogger API做同样的事情。您的示例适用于云存储,因为云存储和云功能可以在GCP的同一个项目中。Blogger的不同之处在于,尽管它是Google的一部分,但它不是GCP的一部分,因此它不能成为项目的一部分。因此,通过本地主机或云功能对blogger的身份验证是相同的。要使用多个文件进行部署,您可以压缩所有文件,然后从压缩文件进行部署。