1

enter image description hereКак сделать аа Google листы таблицы доступны gspread

Я работаю через документации gspread (http://gspread.readthedocs.io/en/latest/oauth2.html), и был в состоянии получить вводный блок кода работы:

import gspread 
gc = gspread.authorize(credentials) 

Однако, когда я запускаю следующий сценарий:

import gspread 
from oauth2client.service_account import ServiceAccountCredentials 

scope = ['https://spreadsheets.google.com/feeds'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('My Project-******97.json', scope) 
gc = gspread.authorize(credentials) 
wks = gc.open("rules_test_1.csv").sheet1 

я получаю:

gspread.exceptions.SpreadsheetNotFound 

Как я могу получить доступ к этому листу?

+0

Можете ли вы объяснить, что вы подразумеваете под «У меня нет листов в Google Диске»? Листы - это приложение, а Drive - это где Sheets сохраняет свои листы. Если вы выполнили действия, описанные в приведенной ссылке, вы получите авторизацию в учетной записи службы. Убедитесь, что вы понимаете, что учетная запись службы не является вашей собственной учетной записью. – pinoyyid

+0

Я внес некоторые изменения в вопрос. – user61629

ответ

1

ОК, вы делаете распространенную ошибку. Если вы ищете «учетную запись службы [google-drive-sdk]» в StackOverflow, вы найдете много людей, задающих тот же вопрос.

В основном учетная запись службы НЕТ вашей учетной записи Google, поэтому ваш файл не найден. Авторы gspread должны были объяснить это в своем примере кода. У вас есть два варианта: -

  1. Делитесь своей таблицей или папкой, в которой она находится, с пользователем учетной записи службы. Это самый простой подход, так как все, что вам нужно сделать, это сделать общий доступ с GDrive, а затем ваш существующий код будет работать. Недостатком является то, что он может быть неуклюжим для совместного использования файлов. Мое предложение состояло в том, чтобы сделать выделенную папку с именем say «shared with my account account» и сделать все файлы дочерними элементами этой папки. Помните, что файлы могут иметь несколько родителей, поэтому вы можете сохранить свою структуру папок. См. Ответ на вопрос How do I search sub-folders and sub-sub-folders in Google Drive?, чтобы узнать, как работают папки Диска.

  2. Замените учетную запись службы на стандартную учетную запись. Это требует некоторых незначительных изменений в вашем коде. Результатом будет то, что ваше приложение напрямую разговаривает с вашей учетной записью накопителя, не имея учетной записи службы, действующей в качестве прокси. Таким образом, это более элегантно, если последствия безопасности приемлемы. Вы будете использовать сохраненный токен обновления. Некоторая информация о том, как сделать это на How do I authorise an app (web or installed) without user intervention? (canonical ?)

Ни путь является правильным или неправильным. Это зависит от ваших конкретных требований.

+0

Спасибо, что очень помогает. – user61629

+0

У меня есть следующий вопрос для разъяснения. В идеале я хотел бы использовать второй метод, но был замедлен, понимая и пытаясь закодировать шаг auth2. Я пытаюсь создать приложение, которое может взаимодействовать с листами Google. Я думаю, что http://stackoverflow.com/questions/19766912/how-do-i-authorise-an-app-web-or-installed-without-user-intervention-canonic говорит, что если вы пройдете шаги и получить долгоживущий токен, ваше приложение может затем использовать его для входа в систему без помощи человека. Это верно? – user61629

+0

да, у тебя это есть. Все примеры показывают, как кодировать auth для нескольких пользователей против их собственных учетных записей. В вашем случае вы хотите, чтобы один пользователь (ваш) против одной учетной записи (ваш), так что шаги, с которыми вы связаны, будут обходить все это и оставляют вас с долгоживущим токеном, который вы можете использовать так же, как вы бы однажды использовали встроенное имя пользователя/пароль. – pinoyyid