Как использовать учетную запись службы для авторизации в Google таблицах?

#python #google-api #google-sheets-api #google-api-python-client #service-accounts

Вопрос:

Я пытаюсь открыть личный лист Google с помощью python. Конечная цель здесь-прочитать эти данные частного листа в объект json. Я позаботился о том, чтобы создать облачный проект Google, включить API и учетную запись службы. Электронная почта учетной записи службы была опубликована и добавлена в качестве редактора. Я также создал ключи OAuth для настольного приложения. Это необходимо, так как файл является закрытым.

Я знаю, что мне нужно каким-то образом запросить токен для использования для доступа к API листов, но я не знаю, как создать запрос и использовать client_secret файл, созданный с помощью ключей OAuth. Я подумал, что в GoogleAPI будет функция, с помощью которой вы можете передать этот файл напрямую, но я потерялся в документации.

Любое понимание будет оценено по достоинству!

Ответ №1:

Все, что вам нужно сделать, это указать в библиотеке местоположение файла clientSecret.json, который вы должны были загрузить с облачной консоли Google. Этот метод должен создать сервис для вас, и вы можете отправлять запросы в api. Он будет обрабатывать всю авторизацию.

 from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials


def get_service(api_name, api_version, scopes, key_file_location):
    """Get a service that communicates to a Google API.

    Args:
        api_name: The name of the api to connect to.
        api_version: The api version to connect to.
        scopes: A list auth scopes to authorize for the application.
        key_file_location: The path to a valid service account JSON key file.

    Returns:
        A service that is connected to the specified API.
    """

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
            key_file_location, scopes=scopes)

    # Build the service object.
    service = build(api_name, api_version, credentials=credentials)

    return service
 

Лучший пример, который я знаю для аутентификации учетной записи службы с помощью python, — это быстрый запуск Google analytics.Если у вас возникнут какие-либо проблемы с его изменением для Google листов, дайте мне знать, я могу попытаться помочь.

Называть это должно быть что-то вроде этого.

 def main():
    # Define the auth scopes to request.
    scope = 'https://www.googleapis.com/auth/spreadsheets'
    key_file_location = '<REPLACE_WITH_JSON_FILE>'

    # Authenticate and construct service.
    service = get_service(
            api_name='sheets',
            api_version='v4',
            scopes=[scope],
            key_file_location=key_file_location)

    data = your_method_to_call_sheets(service)
 

Как создать clientSecret.json не забудьте включить API google листов в разделе библиотека

Комментарии:

1. Потрясающе, работает! для тех, кто еще борется, я использовал этот код, чтобы затем получить данные листа: лист = сервис.электронные таблицы() результат = лист.значения().get(spreadsheetId=SAMPLE_SPREADSHEET_ID, диапазон=SAMPLE_RANGE_NAME).execute() значения = результат.get(‘значения’, [])