Проверка подлинности gspread выдает недостаточное разрешение

С помощью developer.google.com мы создали пользователя API и загрузили учетные данные в виде файла json. Теперь на моем macbook проверка подлинности gspread работает нормально при использовании учетных данных.json. при перемещении той же конфигурации на сервер Linux на aws выдается ошибка 403 с недостаточным разрешением.

Версия Pip и Python одинакова.

исключение

gspread.v4.exceptions.APIError: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "insufficientPermissions",
    "message": "Insufficient Permission"
   }
  ],
  "code": 403,
  "message": "Insufficient Permission"
 }
}

базовый код

import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
client = gspread.authorize(creds)

sheet = client.open('MySheetName').sheet1

person Ahsan Naseem    schedule 13.03.2018    source источник
comment
Я вижу аналогичную проблему на одном из двух моих серверов Linux. Единственная разница, которую я могу сейчас выделить между моими серверами, заключается в том, какую версию gspread они установили, может быть, проверить, какую версию gspread используют ваши две машины? Пожалуйста, дайте мне знать, как вы решаете!   -  person Weir_Doe    schedule 14.03.2018
comment
Я откатил версию gspread на своем Linux-сервере, на котором возникла та же проблема, и это, похоже, решило проблему для меня, подразумевая, что виноват может быть gspread 2.0, надеюсь, у вас похожая проблема. Вот что я запустил: pip install 'gspread==0.6.2' --force-reinstall   -  person Weir_Doe    schedule 14.03.2018


Ответы (3)


Попробуйте изменить переменную scope на следующее:

scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']

Убедитесь, что Drive API включен в консоли API.

gspread был обновлен и теперь основан на API v4. Это быстрее, но требует обновлений области действия.

Вот та же проблема: https://github.com/burnash/gspread/issues/512

person Burnash    schedule 15.03.2018
comment
работал на меня! сначала он дал мне «отказано в доступе» и ссылку для активации первого выполнения. после этого заработало. - person Vincenzooo; 28.04.2018

Похоже, вы используете сервисный аккаунт. Чтобы учетная запись службы могла получить доступ к вашей электронной таблице, она должна иметь к ней доступ.

Убедитесь, что вы делитесь листом с адресом электронной почты учетной записи службы, вы можете сделать это через веб-страницу Google Диска.

person DaImTo    schedule 13.03.2018
comment
Я не думаю, что это может быть проблемой, OP говорит, что учетная запись службы работает на Macbook, но не на сервере Linux, поэтому у нее должен быть доступ. - person Weir_Doe; 14.03.2018

ЕСЛИ вы не можете получить доступ даже после обновления области, попробуйте запустить эту команду в своем терминале:

sudo pip установить 'gspread == 0.6.2' --force-reinstall

person Yogamurthy    schedule 05.05.2018
comment
Я бы не советовал людям переходить на более раннюю версию: gspread 0.6.2 использует более старую версию API листов (v3). Google настоятельно рекомендует выполнить обновление с версии 3, так как она будет объявлена ​​устаревшей. См. developers.google.com/sheets/api/v3. - person Burnash; 11.05.2018