如何使用 Google API 客户端创建 Python 代码

How to Create Python Code with Google API Client

我有下面的代码,用于列出特定项目的 Google 云服务帐户。

import os
from googleapiclient import discovery
from gcp import get_key

"""gets all Service Accounts from the Service Account page"""

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = get_key()

service = discovery.build('iam', 'v1')

project_id = 'projects/<google cloud project>'

request = service.projects().serviceAccounts().list(name=project_id)
response = request.execute()

accounts = response['accounts']

for account in accounts:
    print(account['email'])

此代码完美运行,并根据需要打印帐户。我想弄清楚的是:

在哪里可以看到如何构造这样的代码?我找到了一个引用了 Python API Client, but I can't seem to figure out how to make the code above from it. I can see the Method 的站点来列出服务帐户,但它仍然没有给我足够的信息。

我应该去其他地方自学吗?非常感谢您提供的任何信息,所以我不会拔掉剩下的头发。

谢谢,埃里克

您可以使用 ipython 安装了 googleapiclient - 像这样:

sudo pip install --upgrade google-api-python-client

您可以转到交互式 python 控制台并执行以下操作:

from googleapiclient import discovery
dir(discovery)
help(discovery)

dir - 给出对象拥有的所有条目 - 所以:

a = ''
dir(a)

将告诉您可以使用字符串对象做什么。执行 help(a) 将为字符串对象提供帮助。你可以做北斗:

目录(发现) # 然后例如
帮助(discovery.re)

您可以分步调用您的脚本,查看打印结果,做一些研究,做一些事情 - 做 %history 来打印您的会话,并获得可以作为脚本触发的解决方案。

跟大家分享一下this documentation page,里面有很详细的说明如何搭建一个脚本,比如你分享的那个,每行代码是什么意思。它是从 ML Engine 的文档中提取的,而不是 IAM,但它使用相同的 Python Google API Client Libary,因此只需忽略对 ML 的引用,其余的将很有用给你。

无论如何,这里是您代码的注释版本,以便您更好地理解它:

# Imports for the Client API Libraries and the key management
import os
from googleapiclient import discovery
from gcp import get_key

# Look for an environment variable containing the credentials for Google Cloud Platform
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = get_key()

# Build a Python representation of the REST API
service = discovery.build('iam', 'v1')

# Define the Project ID of your project
project_id = 'projects/<google cloud project>'

"""Until this point, the code is general to any API
From this point on, it is specific to the IAM API"""

# Create the request using the appropriate 'serviceAccounts' API
# You can substitute serviceAccounts by any other available API
request = service.projects().serviceAccounts().list(name=project_id)

# Execute the request that was built in the previous step
response = request.execute()

# Process the data from the response obtained with the request execution
accounts = response['accounts']
for account in accounts:
    print(account['email'])

理解代码的第一部分后,最后几行特定于您正在使用的 API,在本例中为 Google IAM API。在此 link 中,您可以找到有关可用方法及其作用的详细信息。

然后,您可以按照您分享的Python API Client Library documentation查看如何调用这些方法。比如你分享的代码中,使用的方法依赖于service,也就是API的Python表示,然后在最后的link,如 projects(),然后是 serviceAccounts(),最后是特定的 list() 方法,它以 request = service.projects().serviceAccounts().list(name=project_id).

结束

最后,如果您对其他可用的 API 感兴趣,请参阅 this page 了解更多信息。

我希望我对您的代码所做的评论对您有所帮助,并且共享的文档可以让您更轻松地理解如何编写这样的代码。