Прочитайте таблицу Google в панде. - PullRequest
0 голосов
/ 12 мая 2018

Не очень опыт работы с аутентификацией API, но я не могу понять, как читать общий ресурс Google Sheet со мной из Python.

Я пробовал:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

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

credentials = ServiceAccountCredentials.from_json_keyfile_name('/Users/alexiseggermont/Downloads/Accountable-7b29dac08324.json', scope)

gc = gspread.authorize(credentials)

wks = gc.open("mysheet").sheet1

Это дает мне ImportError: cannot import name 'opentype' в строке 2.

Я тогда попробовал:

import oauth2client.client, oauth2client.file, oauth2client.tools
import gspread

flow = oauth2client.client.OAuth2WebServerFlow(client_id, client_secret, 'https://spreadsheets.google.com/feeds')
storage = oauth2client.file.Storage('credentials.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
    import argparse
    flags = argparse.ArgumentParser(parents=[oauth2client.tools.argparser]).parse_args([])
    credentials = oauth2client.tools.run_flow(flow, storage, flags)

gc = gspread.authorize(credentials)

# when this cell is run, your browser will take you to a Google authorization page.
# this authorization is complete, the credentials will be cached in a file named credentials.dat

Откроется окно с вопросом, хочу ли я предоставить моему приложению доступ к моим листам, и я нажимаю «да». Но тогда sheet = gc.open("mysheet").sheet1 выдает ошибку разрешения:

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

Единственное предложение, которое я нахожу для решения этой ошибки, - это изменение переменной 'scope', но в этом коде не используется переменная scope, поэтому я в замешательстве.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

есть также сама библиотека Gspread-Pandas, где документы имеют простое введение в часть Oauth, и более простым способом: https://github.com/aiguofer/gspread-pandas

Перед использованием вам необходимо скачатьУчетные данные клиента Google для вашего приложения.

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

Выберите Создать проект во всплывающем меню вверху.Появится диалоговое окно, поэтому дайте имя вашему проекту и нажмите кнопку «Создать».В левом меню нажмите на API Manager.Таблица доступных API приведена.Переключите Drive API и нажмите кнопку Включить API.Сделайте то же самое для Sheets API.Другие API могут быть отключены для нашей цели.В меню слева нажмите «Учетные данные».В разделе OAuth-экран согласия выберите свой адрес электронной почты и дайте название вашему продукту.Затем нажмите на кнопку Сохранить.В разделе «Учетные данные» нажмите «Добавить учетные данные» и переключите идентификатор клиента OAuth 2.0.Появится диалоговое окно Create Cliend ID.Выберите пункт Тип приложения как Другое.Нажмите на кнопку Создать.Щелкните значок «Загрузить JSON» справа от созданных идентификаторов клиента OAuth 2.0 и сохраните загруженный файл в своей файловой системе.Помните, что файл содержит ваши личные учетные данные, поэтому заботьтесь о нем так же, как и о своем личном SSH-ключе;т.е. переместите загруженный JSON в ~ / .config / gspread_pandas / google_secret.json (или вы можете настроить каталог и имя файла, напрямую вызвав gspread_pandas.conf.get_config. Благодаря похожему проекту df2gspread, за это отличное описание того, как получить учетные данные клиента.

Учетные данные пользователя Если у вас есть учетные данные клиента, вы можете хранить несколько учетных данных пользователя на одном компьютере. Это может быть полезно, если у вас есть общий сервер (например, с сервером ноутбуков Jupyter) с несколькими людьми, которыеВозможно, вы захотите использовать библиотеку. Первым параметром Spread должен быть ключ, идентифицирующий учетные данные пользователя. При первом вызове для определенного ключа вам придется проходить аутентификацию через текстовое приглашение OAuth; это позволяет запуститьна безголовом сервере через ssh или через блокнот Jupyter. После этого учетные данные для этого пользователя будут сохранены (по умолчанию в ~ / .config / gspread_pandas / creds или вы можете установить его вручную в GSPREAD_PANDAS_CONFIG_DIR env var) и токены будут автоматически обновляться при каждом использовании инструмента.

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

Обработка аутентификации В бэкэндебиблиотека использует Google's oauth2client <http://oauth2client.readthedocs.io/en/latest/ __ для обработки аутентификации.Он удобно хранит все, как описано выше, так что вам не нужно беспокоиться о коде котельной пластины для обработки аутентификации.Однако, если вам нужно настроить аутентификацию, вы можете сделать это несколькими различными способами.Вы можете изменить каталог, в котором хранится все, используя GSPREAD_PANDAS_CONFIG_DIR env var.Вы также можете сгенерировать свой собственный oauth2client.client.OAuth2Credentials и передать их при создании экземпляра объекта Client или Spread.Чтобы узнать о других способах настройки аутентификации, см. Gspread_pandas.conf.get_config и gspread_pandas.conf.get_creds

0 голосов
/ 12 мая 2018

Вы можете добавить несколько областей, используя пробелы. Так можете ли вы попробовать следующую модификацию?

От:

flow = oauth2client.client.OAuth2WebServerFlow(client_id, client_secret, 'https://spreadsheets.google.com/feeds')

Кому:

flow = oauth2client.client.OAuth2WebServerFlow(client_id, client_secret, 'https://spreadsheets.google.com/feeds https://www.googleapis.com/auth/drive')

Примечание:

  • Перед запуском измененного скрипта удалите credentials.dat. Таким образом, credentials.dat создается с использованием новых областей.
  • В моем окружении я подтвердил, что, когда область действия только https://spreadsheets.google.com/feeds, возникает та же ошибка. Если область действия https://spreadsheets.google.com/feeds https://www.googleapis.com/auth/drive, ошибки не возникает.

Если это не помогло в вашей ситуации, извините.

...