Какой файл указать в CREDENTIALS_FILE

Рейтинг: 0Ответов: 1Опубликовано: 10.01.2023

Делаю бота в телеграм и дело дошло до деплоя на Хероку. Но я в своем боте задействовал библиотеку гугл для управления google sheets.

import googleapiclient.discovery
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
from googleapiclient.http import MediaFileUpload
import os
import json


def send_values_to_table(table_name, operation, score, link="", amount=""):
    CREDENTIALS_FILE = (".profile")
    spreadsheet_id = os.environ.get("spreadsheet_id")

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        CREDENTIALS_FILE,
        ["https://www.googleapis.com/auth/spreadsheets",
        "https://www.googleapis.com/auth/drive"])
    httpAuth = credentials.authorize(httplib2.Http())
    service = googleapiclient.discovery.build("sheets", "v4", http = httpAuth)

Строка spreadsheet_id = os.environ.get("spreadsheet_id") принимает значение из Config Vars Heroku.

Но вот в CREDENTIALS_FILE = (".profile") проблема, я не знаю что сюда указывать. делал я все по этому гайду: https://medium.com/@mandarvaze/how-to-safely-use-google-application-credentials-on-heroku-4e310ad67934

У меня на Heroku сейчас вот так: heroku screenshot

Подскажите, что ввести в CREDENTIALS_FILE чтоб все заработало

Ответы

▲ 0Принят

Все было легче, чем вообще нужно было

Нужна лишь одна запись в Heroku, содержание всех ключей google sheets

введите сюда описание изображения

Нам нужно получить эти данные с Heroku: CREDENTIALS = os.environ["GOOGLE_CREDITIONALS"] Далее нужно использовать метод ServiceAccountCredentials.from_json_keyfile_dict который похож на ServiceAccountCredentials.from_json_keyfile_name, но вместо файла принимает dict.

Нужно преобразовать CREDENTIALS в dict: json.loads(CREDENTIALS) и у меня получился такой код:

CREDENTIALS = os.environ["GOOGLE_CREDITIONALS"]
spreadsheet_id = os.environ.get("spreadsheet_id")
    
credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    json.loads(CREDENTIALS),
    ["https://www.googleapis.com/auth/spreadsheets", 
    "https://www.googleapis.com/auth/drive"]
)
httpAuth = credentials.authorize(httplib2.Http())
service = googleapiclient.discovery.build("sheets", "v4", http = httpAuth)