Проблемы с доступом к определенным таблицам с помощью OAuth 2.0 - PullRequest
0 голосов
/ 16 мая 2019

Впервые в API Google, следуя указаниям Быстрый запуск Python для базовой программы.Решил заставить программу работать, используя мой собственный API Project, и получить доступ к их листу примера с новыми учетными данными, но не к моей собственной таблице.Все, что я изменяю, это SAMPLE_SPREADSHEET_ID, не совсем уверенный, почему я не могу получить доступ к своим собственным таблицам.Даже сделал их публичными.Включите API-интерфейс Sheets для рассматриваемой учетной записи.

Я получаю эту ошибку:

    {
  "error": {
    "code": 403,
    "message": "The request is missing a valid API key.",
    "status": "PERMISSION_DENIED"
  }
}

Вот программа: (Я знаю, что это долго, я спрашиваю только из отчаяния, как днипогуглить и мучить не смог решить мою проблему)

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']

# The ID and range of a sample spreadsheet.
SAMPLE_SPREADSHEET_ID = '1V7reDgXa4AuIa0hmf7cpr9SLxL0aZ0LuUXy3kBtR1uM'
SAMPLE_RANGE_NAME = 'Class Data!A1:C'


def main():

    """Shows basic usage of the Sheets API.
    Prints values from a sample spreadsheet.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('sheets', 'v4', credentials=creds)

    # Call the Sheets API
    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                                range=SAMPLE_RANGE_NAME).execute()
    values = result.get('values', [])

    if not values:
        print('No data found.')
    else:
        print('Name, Major:')
        for row in values:
            # Print columns A and E, which correspond to indices 0 and 4.
            print('%s, %s' % (row[0], row[2]))


if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 16 мая 2019

Я вижу, как это может расстраивать. Попробуйте, если хотите:

<ч />

Если в папке приложения есть файлы credentials.json и token.pickle, вместе с программой quickstart.py удалите credentials.json и token.pickle, оставьте только quickstart.py.

Затем запустите python quickstart.py, и вы должны получить ошибку с No such file or directory: 'credentials.json'

Далее перейдите к (https://console.cloud.google.com/getting-started)) и выберите проект. Вы упомянули, что решили использовать свой «собственный проект API», поэтому выберите его.

Далее, используя левое навигационное меню, перейдите в «API & Services»> «Библиотека», в разделе «G Suite» нажмите «API Google Sheets». Убедитесь, что написано «API включен». Если он не включен для этого проекта, включите его.

Далее, используя левое меню навигации, перейдите в «APIs & Services»> «Учетные данные», нажмите «Создать учетные данные»> «Помогите выбрать»

Далее, на вопрос «Какой API вы используете?», Выберите «Google Sheets API», а затем «Откуда вы будете вызывать API?» выберите «Другой пользовательский интерфейс (например, Windows, CLI Tool)», а затем на вопрос «К каким данным вы будете обращаться?» выберите «Данные пользователя»

Как только вы нажмете "Какие учетные данные мне нужны?" кнопка, либо сообщит вам, что «У вас уже есть учетные данные», либо создаст новые учетные данные в разделе «Идентификаторы клиента OAuth 2.0»

Затем, используя левое навигационное меню, снова перейдите к «API & Services»> «Учетные данные» и в разделе «Идентификаторы клиента OAuth 2.0» вы увидите запись с «Имя», «Дата создания» и т. Д. и справа кнопка «Скачать JSON». Нажмите на него и сохраните файл как credentials.json в папке вашего приложения.

Теперь у вас есть два файла в папке приложения: quickstart.py и credentials.json.

Далее, запустите снова python quickstart.py.

Это попытается открыть новое окно или вкладку в браузере по умолчанию. Если это не удается, скопируйте URL-адрес из консоли и вручную откройте его в браузере.

Если вы еще не вошли в свою учетную запись Google, вам будет предложено войти в систему. Если вы вошли в несколько учетных записей Google, вам будет предложено выбрать одну учетную запись для использования для авторизации.

Здесь речь идет об учетной записи Google, к которой относится электронная таблица. После выбора учетной записи вы должны увидеть модал «Предоставить ... разрешение». Нажмите Разрешить.

Далее вы должны увидеть панель «Подтвердите свой выбор», снова с кнопкой «Разрешить». После того, как вы щелкнете по нему, появится «Процесс аутентификации завершен, вы можете закрыть это окно». и если вы проверите папку своего приложения, вы увидите, что файл token.pickle создан.

Теперь python quickstart.py должен иметь доступ к вашей электронной таблице.

<ч /> Примечание: Class Data из SAMPLE_RANGE_NAME = 'Class Data!A1:C' это имя вкладки из примера Google. Возможно, ваша таблица имеет другое имя для вкладки.

...