как передать аутентификацию / учетные данные в сообщение API облака Google, которое я запускаю из python - PullRequest
0 голосов
/ 30 мая 2018

Я не знаю, как передать аутентификацию / учетные данные в сообщение API облака Google, которое я запускаю из моей программы на python

import requests

api_endpoint = "https://dataflow.googleapis.com/v1b3/projects/projectid/templates"


data = {
  "jobName": "scriptjob2",
  "parameters": {
    "inputFilePattern": "gs://bucket/files/*.json",
    "outputTopic": "projects/project6/topics/data"
  },
  "environment": {
    "tempLocation": "gs://bucket/tmp",
    "zone": "us-central1-f"
  },
  "gcsPath": "gs://dataflow-templates/latest/GCS_Text_to_Cloud_PubSub",
  "location": "us-central1"
}

r = requests.post(url = api_endpoint, data = data)

result = r.text
print("Result:%s"%result)

Я знаю, что должен передать службу Googleаутентификация учетной записи, но я просто не могу понять, как это сделать.Это сообщение об ошибке, которое я получаю.

"error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other v

alid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вот как мне удалось заставить это работать:

from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()
service = build('dataflow', 'v1b3', credentials=credentials)


PROJECT = 'projectid'
BUCKET = 'dataflow-templates'
TEMPLATE = 'GCS_Text_to_Cloud_PubSub'
GCSPATH="gs://{bucket}/latest/{template}".format(bucket=BUCKET, template=TEMPLATE)
BODY = {
   "jobName": "job1",
   "parameters": {
       "inputFilePattern": "gs://bucket/files/*.json",
       "outputTopic": "projects/project6/topics/data"
   },
   "environment": {
       "tempLocation": "gs://bucket/tmp",
       "zone": "us-central1-f"
   }
}


request = service.projects().templates().launch(projectId=PROJECT, gcsPath=GCSPATH, body=BODY)
response = request.execute()

print(response)
0 голосов
/ 30 мая 2018

Я предлагаю использовать sdk для python для потока данных.

Однако, если вы настаиваете на использовании запросов, это просто:

"https://dataflow.googleapis.com/v1b3/projects/projectid/templates&key={yourapikey}"

здесь это ссылка на это в браузере для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...