Я использую 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"
}
Я не позволяю показать, что действительно в дикте.
Поскольку я хотел передать данные учетных данных из моего приложения, а не из 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
Еще раз спасибо всем
oauth2client
устарел ...
Поскольку вы используете 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.
from_json_keyfile_name
чтобы увидеть, для чего он использует параметр / для чего он предназначен, или искать альтернативный метод, может быть,from_json_keyfile_dict