【问题标题】:GET data from Google REST API , using Service Acocunt使用服务帐户从 Google REST API 获取数据
【发布时间】:2019-02-14 13:57:03
【问题描述】:

我想从 API 获取信息(数据)并显示它。使用 API 从 Big Query 获取数据。

目前,我编写的代码可能会显示来自 API 的信息,但我不确定如何将服务帐户用作环境。

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
)

    func main() {

        response, err := http.Get("https://www.googleapis.com/bigquery/v2/projects/PROJECT_ID/queries/JOB_ID")
        if err != nil {
            fmt.Printf("%s", err)
            os.Exit(1)
        } else {
            defer response.Body.Close()
            contents, err := ioutil.ReadAll(response.Body)
            if err != nil {
                fmt.Printf("%s", err)
                os.Exit(1)
            }
            fmt.Printf("%s\n", string(contents))
        }
    }

预期的结果应该只是显示来自 API 的数据,那么我将需要创建一个无需使用参数进行身份验证即可访问的 API(作为 GET 方法)

附:这是 API 的链接 - https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/getQueryResults

【问题讨论】:

  • 您的问题是什么?从您提供的示例中不清楚这一点。您是否正在寻找一种使用环境变量的方法?如果是这样:PROJECT_ID := os.Getenv("PROJECT_ID")
  • @joerivrij 他们正在寻找一种使用 Big query api 无需身份验证即可访问私人用户数据的方法。
  • @DaImTo 与用户数据无关。我想从 Big Query 结果中获取信息,我想使用身份验证,但使用 SERVICE ACCOUNT,但不知道在这些情况下如何...
  • 检查我首先发布的关于设置您的凭据的两个链接,第二个正在连接。

标签: go google-api google-bigquery google-authentication


【解决方案1】:

如果您检查文档,您会注意到它 stats Jobs: getQueryResults 它指出您正在调用的方法要求您使用以下范围之一进行身份验证。

您尝试访问的数据是私人用户数据,您必须通过身份验证才能访问私人用户数据。您似乎没有尝试以任何方式进行身份验证。

您创建的服务帐户凭据应在您的代码中用于向 google 发送授权请求

您可以在此处找到有关如何使用服务帐户进行身份验证的一些信息。 introduction to authentication

启用凭据

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"

代码

// Sample bigquery-quickstart creates a Google BigQuery dataset.
package main

import (
        "fmt"
        "log"

        // Imports the Google Cloud BigQuery client package.
        "cloud.google.com/go/bigquery"
        "golang.org/x/net/context"
)

func main() {
        ctx := context.Background()

        // Sets your Google Cloud Platform project ID.
        projectID := "YOUR_PROJECT_ID"

        // Creates a client.
        client, err := bigquery.NewClient(ctx, projectID)
        if err != nil {
                log.Fatalf("Failed to create client: %v", err)
        }

        // Sets the name for the new dataset.
        datasetName := "my_new_dataset"

        // Creates the new BigQuery dataset.
        if err := client.Dataset(datasetName).Create(ctx, &bigquery.DatasetMetadata{}); err != nil {
                log.Fatalf("Failed to create dataset: %v", err)
        }

        fmt.Printf("Dataset created\n")
}

【讨论】:

  • 我想为服务帐户设置一个环境变量,因为实际的 URL 将为我提供我需要的结果。所以我不需要从 BigQuery 查询我只需要一些代码就可以使用服务帐户设置环境身份验证
  • 作为python中的示例,我使用-os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "service_account.json"
  • 我怀疑它需要指向完整路径。您将无法使用 http.get 方法,您需要使用他们给您的示例。
  • 点击此链接时出现此类错误 - “消息”:“请求缺少所需的身份验证凭据。需要 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据。请参阅 developers.google.com/identity/sign-in/web/devconsole-project。 ",
  • 我试过 os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", "/auth/google_bigquery.json") 但还是不行
猜你喜欢
  • 1970-01-01
  • 2018-12-12
  • 2019-05-21
  • 2018-07-05
  • 2021-01-29
  • 2013-12-19
  • 2021-09-30
  • 1970-01-01
  • 2019-11-06
相关资源
最近更新 更多