【问题标题】:How to correctly call an API in Google Cloud Functions with a Python Function?如何使用 Python 函数正确调用 Google Cloud Functions 中的 API?
【发布时间】:2022-01-06 18:15:05
【问题描述】:

我是 python 新手,想通过 Google Cloud Functions 从 API 获取数据,以便之后可以将数据存储在 Google Cloud Storage 中。

数据以 JSON 格式提供,我想通过 pandas 将其转换为表格。

由于我真的不确定正确的语法,我想知道我必须如何调用函数 test_topic - 以下代码对我不起作用。我没有收到错误消息,但也没有得到任何结果。

我该怎么做才能得到表格?

import requests
import pandas as pd

def test_topic(df):
    url = "https://api.domain.com/v1/"
    payload={}
    headers = {}
    parameters = {
        "api_key": "1234567890",
        "start_date": "2020-01",
        "end_date": "2021-01",
        "format": "json" 
    }

    response = requests.request("GET", url, headers=headers, data=payload, params=parameters)

    df = response.json()['visits']  
    pd.DataFrame(df)

【问题讨论】:

  • 您忘记包含错误消息。
  • 你是对的,对不起。我没有收到任何错误消息,只是我没有得到任何结果。
  • 您的代码中的响应状态是什么?
  • 响应状态为 200

标签: python python-3.x google-cloud-platform google-cloud-functions


【解决方案1】:

您的第一个问题是您可能需要针对 Cloud Function 验证您的请求。除非 Cloud Function 已部署 --allow-unauthenticated(允许任何人),否则您将不得不使用访问 (?) 令牌 (TOKEN) 对请求进行身份验证:

token = os.getenv("TOKEN")
headers=["Authorization"] = "Bearer: {token}".format(token=token)}

出于开发目的,您可以使用gcloud 获取令牌并将其导出到您的代码中:

export TOKEN=$(gcloud auth print-access-token)
python3 main.py

您还应该:

headers["Accept"] = "application/json"

对于调试,您应该考虑:

json_response = response.json()
print(json_response)

在你尝试访问visits之前,也许:

if "visits" in json_response:
  # JSON response contains "visits"
else:
  # JSON response does not contain "visits"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2021-06-30
    • 2021-12-26
    • 2020-03-15
    • 2020-08-16
    • 2020-04-08
    • 2021-05-16
    • 2019-12-30
    相关资源
    最近更新 更多