【问题标题】:Error creating Blogger API end point using Google API Client defaut credentails使用 Google API 客户端默认凭据创建 Blogger API 端点时出错
【发布时间】:2020-01-01 20:27:05
【问题描述】:

我正在尝试在 Google Cloud 函数中创建 Blogger API 服务对象。我指的是https://cloud.google.com/docs/authentication/production#providing_credentials_to_your_application 中的示例(“获取 Compute Engine、Kubernetes Engine、App Engine 柔性环境和 Cloud Functions 的凭据”一节)

给出的示例适用于 Google Starage。我正在尝试将其转换为 Blogger 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 

【问题讨论】:

    标签: python-3.x google-cloud-functions blogger google-api-python-client


    【解决方案1】:

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

    Here 是如何使用正确的客户端库连接到 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 调用是通过服务器或桌面进行的。我的问题是通过无法存储文件的 Google Cloud Function 使用 API。给定的示例适用于 Google Storage API。我正在尝试为 Blogger API 做同样的事情。
    • 您的示例适用于 Cloud Storage,因为 Cloud Storage 和 Cloud Functions 都可以位于 GCP 中的同一个项目中。与 Blogger 的不同之处在于,尽管它是 Google 的一部分,但它不是 GCP 的一部分,因此它不能成为项目的一部分。因此,对博主的身份验证将与 localhost 或 Cloud Functions 相同。
    • 要部署多个文件,您可以压缩所有文件,然后从 zip 文件进行部署。
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2021-05-02
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    相关资源
    最近更新 更多