Авторизация нескольких API Google в одном без браузера - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть скрипт, который должен извлечь данные из Google Drive, Bigquery, а затем передать их в Google Sheets.

Мне удалось пройти проверку подлинности на листах Bigquery и Google без браузера, но я не могу найти четкую информацию о том, как это сделать в Google Диске, и, что более важно, о том, как сделать это аккуратно Таким образом, сохраненная учетная запись службы работает со всеми тремя.

Вот что у меня есть для Bigquery

import pandas_gbq
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_info(
    {
        -InfoService account
  },
)
credentials = credentials.with_scopes(
    [
     'https://www.googleapis.com/auth/cloud-platform',
     'https://www.googleapis.com/auth/bigquery',
     'https://www.googleapis.com/auth/drive',
     ],
     )

sql = """sqlquery"""
df = pandas_gbq.read_gbq(sql, project_id=project_id, credentials=credentials)

И для листов Google

auth_key = {
  "client_id": "id",
  "client_secret": "secret",
  "refresh_token": "token"
}

credentials = client.OAuth2Credentials(
    access_token=None,
    client_id=auth_key['client_id'],
    client_secret=auth_key['client_secret'],
    refresh_token=auth_key['refresh_token'],
    token_expiry=None,
    token_uri=GOOGLE_TOKEN_URI,
    user_agent=None,
    revoke_uri=GOOGLE_REVOKE_URI)

credentials.refresh(httplib2.Http())
credentials.authorize(httplib2.Http())
cred = json.loads(credentials.to_json())
cred['type'] = 'authorized_user'

with open('adc.json', 'w') as outfile:
  json.dump(cred, outfile)

gauth = GoogleAuth()
gauth.credentials = credentials
client = gspread.authorize(gauth.credentials)
...