Я не могу авторизоваться с помощью gspread на Python 3 - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть простой скрипт с созданием googlesheet на Python 3.6, например:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

mail = 'my_mail@gmail.com'
secret_file = "C:\\Users\\admin\\Downloads\\my_file.json"

SCOPES = ['https://spreadsheets.google.com/feeds']

credentials = ServiceAccountCredentials.from_json_keyfile_name(secret_file, SCOPES)

gss_client = gspread.authorize(credentials)
gss = gss_client.open('test-doc')
worksheet = gss.sheet1

Но когда я запускаю его, у меня появляется ошибка типа:

Traceback (последний вызов был последним): File «C: /Users/admin/PycharmProjects/untitled/fjhdshfjs.py», строка 11, в ... "C: \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python36 \ Lib \ base64.py", строка 58, в b64encode encoded = binascii.b2a_base64 (s, newline = False) TypeError: требуется байтоподобный объект, а не 'str'

Раньше эту проблему можно было решить с помощью кодировки:

credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'].encode(), scope)

Но теперь он не работает после перемещения SignedJwtAssertionCredentials на oauth2client.service_account.ServiceAccountCredentials

Может, кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 03 сентября 2018

Я думаю, что код, который вы ищете, ближе к этому

from google.oauth2 import service_account
import googleapiclient.discovery

SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'

credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('sheets', 'v4', http=creds.authorize(Http()))

# Call the Sheets API
SPREADSHEET_ID = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
RANGE_NAME = 'Class Data!A2:E'
result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
                                            range=RANGE_NAME).execute()
values = result.get('values', [])

Использование OAuth 2.0 для серверных приложений

...