У меня есть электронная таблица Google, с которой я пытаюсь получить доступ через небольшой сервис-клиент OAuth 2.0 Python, который я пишу, используя gspread
и oauth2client
.Python - проблемы с доступом к электронной таблице Google с использованием клиента службы OAuth 2.0
Я создал учетную запись службы OAuth 2.0 в Google Developers Console, а поделились электронной таблицей с этим электронным адресом, предоставив клиенту/приложению доступ к ней и поместив файл ключа JSON, содержащий учетные данные, в небольшой тест скрипт. Хотя я могу построить OAuth опротестовать 2.0 учетные данные и даже получить клиент электронной таблицы, при вызове openall()
на клиенте есть ошибка XML синтаксический анализ:
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/gspread/client.py", line 214, in openall
feed = self.get_spreadsheets_feed()
File "/Library/Python/2.7/site-packages/gspread/client.py", line 230, in get_spreadsheets_feed
return ElementTree.fromstring(r.read())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1301, in XML
return parser.close()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1654, in close
self._raiseerror(v)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1506, in _raiseerror
raise err
xml.etree.ElementTree.ParseError: no element found: line 1, column 0
Вот код:
import gspread
from gspread import Client
from gspread.httpsession import HTTPSession
from oauth2client.client import SignedJwtAssertionCredentials
OAuth2_JSON_key = {
"client_auth_scope": "https://spreadsheets.google.com/feeds",
"myspreadsheet_keys":
{
"myspreadsheet_key": "XXXX"
},
"private_key_id": "XXXX",
"private_key": "XXXX",
"client_email": "[email protected]",
"client_id": "XXXXgkcvcke.apps.googleusercontent.com",
"client_type": "service_account"
}
OAuth2_credentials = SignedJwtAssertionCredentials(
OAuth2_JSON_key['client_email'],
OAuth2_JSON_key['private_key'],
OAuth2_JSON_key['client_auth_scope']
)
persistent_session = HTTPSession(headers={'Connection':'Keep-Alive'})
spreadsheet_client = gspread.Client(
auth=OAuth2_credentials,
http_session=persistent_session
)
spreadsheets = spreadsheet_client.openall()
Если вместо использования 'gspread.Client (auth = OAuth2_credentials, http_session = persistent_session)' я просто использую 'gspread.authorize (OAuth_credentials)', тогда я получаю клиент электронной таблицы, который не пуст. –
Я думаю, что есть ошибка в 'gspread.Client', но я не могу поднимать проблемы на github repo https://github.com/burnash/gspread. –