GSpread передать учетные данные из Python, а не JSON

1

Я использую GSpread, пытаясь передать содержимое в моем файле JSON (учетные данные приложения API Google API) в качестве словаря python на моем скрипте. Я пытаюсь не переносить json файл везде, где я беру свой скрипт.

Я получаю следующую ошибку, когда пытаюсь передать словарь вместо json файла в следующей строке:

credentials = ServiceAccountCredentials.from_json_keyfile_name(auth_gdrive(), scope)

ТипError: ожидаемый объект str, bytes или os.PathLike, не задан

### auth_gdrive() returns a dictionary like this:

def auth_gdrive():
    dic = {
        "type": "miauuuuuu",
        "pass": "miauuuu"
    }

Я не позволяю показать, что действительно в дикте.

  • 0
    JSON-файл будет читаться как текст, я не думаю, что он по сути знает, как перевести объект словаря в текст
  • 0
    Я думаю, вы должны покопаться в коде метода from_json_keyfile_name чтобы увидеть, для чего он использует параметр / для чего он предназначен, или искать альтернативный метод, может быть, from_json_keyfile_dict
Теги:
google-sheets-api
gspread

2 ответа

0

Поскольку я хотел передать данные учетных данных из моего приложения, а не из json файла, который я не мог использовать:

ServiceAccountCredentials.from_json_keyfile_name()

from_json_keyfile_name() ожидает json файл. Но, заглянув в документы, я обнаружил следующее:

ServiceAccountCredentials.from_json_keyfile_dict()

Это будет ожидать объекта dict, это все, что мне нужно.

Ссылка на сайт:

https://oauth2client.readthedocs.io/en/latest/source/oauth2client.service_account.html

Еще раз спасибо всем

  • 0
    oauth2client устарел ...
0

Поскольку вы используете ServiceAccountCredentials, я предполагаю, что вы используете OAuth2 для авторизации. Вы можете пропустить json файл, используя oauth2client.SignedJwtAssertionCredentials чтобы создать соответствующий объект учетных данных и передать его gspread.authorize.

import gspread
from oauth2client.client import SignedJwtAssertionCredentials

credentials = SignedJwtAssertionCredentials(service_account_name, private_key.encode(), 
                                            ['https://spreadsheets.google.com/feeds'])
gclient = gspread.authorize(credentials)

UPDATE: похоже, что oauth2client.SignedJwtAssertionCredentials устарел в пользу oauth2client.service_account.ServiceAccountCredentials, который поддерживает только json и p12 keyfiles.

  • 0
    Спасибо всем, как вы сказали, что SignedJwtAssertionCredentials устарел, и теперь мы должны использовать ServiceAccountCredentials.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню