Я новичок, пытающийся получить доступ к листу Google через python gspread
. Я выполняю следующие инструкции: https://towardsdatascience.com/accessing-google-spreadsheet-data-using-python-90a5bc214fd2
.
Я считаю, что успешно создал свои учетные данные: survivor-points-update@update-survivor-gspread.iam.gserviceaccount.com
. Когда я пытаюсь поделиться документом листов Google с этим письмом, я получаю ответ по электронной почте, в котором говорится, что доставка не удалась, поскольку домен не найден. Более конкретно:
DNS Error: 19491 DNS type 'mx' lookup of update-survivor-gspread.iam.gserviceaccount.com responded with code NXDOMAIN Domain name not found: update-survivor-gspread.iam.gserviceaccount.com
Я нашел эту альтернативу , но получил 401 error: The OAuth client was not found.
:
client_id=<CLIENTID_FROM_GOOGLE_DEVLOPER_CONSOLE>
redirect_uri=http://localhost:8080/
scope=https://spreadsheets.google.com/feeds
access_type=offline
response_type=code
Я попытался настроить свои учетные данные a второй раз, но те тоже не работают. Заранее благодарен за любую помощь.
РЕДАКТИРОВАТЬ: На догадку я попытался поделиться другими документами с двумя учетными записями службы, и это не помогло.
РЕДАКТИРОВАТЬ 2: Я пробовал несколько различных настроек и областей, как это было предложено в git Hub Issue .
Мой основной код:
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name(cred_path, scope)
client = gspread.authorize(creds)
sheet = client.open(gsheet).sheet1
С этой областью я получаю следующую ошибку:
Traceback (most recent call last):
File "<ipython-input-8-b2d4b9300652>", line 1, in <module>
sheet = client.open(gsheet).sheet1
File "C:\Users\User\Anaconda3\lib\site-packages\gspread\client.py", line 123, in open
self.list_spreadsheet_files()
File "C:\Users\User\Anaconda3\lib\site-packages\gspread\client.py", line 96, in list_spreadsheet_files
res = self.request('get', url, params=params).json()
File "C:\Users\User\Anaconda3\lib\site-packages\gspread\client.py", line 79, in request
raise APIError(response)
APIError: {
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission: Request had insufficient authentication scopes."
}
],
"code": 403,
"message": "Insufficient Permission: Request had insufficient authentication scopes."
}
}
Если я изменю:
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
затем я получаю:
Traceback (most recent call last):
File "C:\Users\User\Anaconda3\lib\site-packages\gspread\client.py", line 123, in open
self.list_spreadsheet_files()
File "C:\Users\User\Anaconda3\lib\site-packages\gspread\utils.py", line 37, in finditem
return next((item for item in seq if func(item)))
StopIteration
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<ipython-input-22-b2d4b9300652>", line 1, in <module>
sheet = client.open(gsheet).sheet1
File "C:\Users\User\Anaconda3\lib\site-packages\gspread\client.py", line 131, in open
raise SpreadsheetNotFound
SpreadsheetNotFound
Я попытался включить API листов Google для обоих моих проектов и снова запустить код с обоими параметрами области.
Если я запустил client.openall()
он возвращает только следующий список: [<Spreadsheet 'Access Rights Spreadsheet' id:1TwF6neGtogHAsqu4vjIiGWpfUPiQmVFgF5kR8k_8jC0>]
Есть ли другая область, которую я могу добавить, или API, который я могу включить?
РЕДАКТИРОВАТЬ 3: Я не знаю как [<Spreadsheet 'Access Rights Spreadsheet' id:1TwF6neGtogHAsqu4vjIiGWpfUPiQmVFgF5kR8k_8jC0>]
поделились со мной. Я думал, что это был только один, который все имели.
Когда я запускаю это:
bk = client.open_by_key('1TwF6neGtogHAsqu4vjIiGWpfUPiQmVFgF5kR8k_8jC0')
sht = bk.get_worksheet(0)
l = sht.get_all_values()
l
- пустой список. bk.worksheets()
возвращает [<Worksheet 'Sheet1' id:0>]
, поэтому я не вижу никаких других данных.