1. Использование API Google Workspace
Этот практический урок познакомит вас с использованием RESTful API на основе HTTP от Google Workspace (ранее G Suite). Пример будет написан на Python для краткости и доступности, но вы также можете выбрать любой другой язык программирования. Вы познакомитесь с вводными темами, такими как использование консоли разработчика для создания/управления проектами, получение учетных данных для авторизации и установка клиентских библиотек API. После выполнения всех формальностей вы напишете приложение для отображения первых 100 файлов и папок в вашем Google Диске с помощью его API.
Что вы узнаете
- Создайте проект, используя консоль разработчиков Google/Cloud.
- Получите и используйте учетные данные приложения OAuth2 в своем приложении.
- Узнайте об использовании клиентских библиотек API Google.
- Разрабатывайте приложения, используя API Google и Google Workspace.
- Получайте информацию о файлах и папках с помощью API Google Диска.
Что вам понадобится
- Доступ к интернету и веб-браузеру.
- Учетная запись Google (для учетных записей Google Workspace может потребоваться подтверждение администратора).
- Знание POSIX-совместимых систем, таких как Linux и Mac OS X.
- Возможность создавать исходные файлы с помощью редактора кода или командной оболочки.
- Базовые навыки работы с Python (уровень 2 или 3), но вы можете использовать любой поддерживаемый язык.
- Некоторые файлы и/или папки в вашем Google Диске
2. Опрос
Как вы будете использовать этот обучающий материал Codelab?
Как бы вы оценили свой опыт использования инструментов разработчика и API Google Workspace?
3. Обзор
В этом практическом занятии вы научитесь:
- Загрузите клиентскую библиотеку Google API для Python.
- Создайте новый проект в консоли разработчиков Google/Cloud.
- Получите необходимые учетные данные для вашего приложения.
- Используйте эти учетные данные для доступа к API Google Drive.
Если вы предпочитаете не использовать Python, вы можете интегрировать этот код в свой любимый инструмент разработки (клиентские библиотеки для поддерживаемых языков доступны здесь ) и просто ссылаться на примеры на Python как на (исполняемый) псевдокод.
4. Подтвердите окружение Python.
Для выполнения этого практического задания вам потребуется использовать язык Python (хотя клиентские библиотеки Google API поддерживают множество языков , поэтому вы можете создать что-то эквивалентное в своем любимом инструменте разработки и просто использовать Python в качестве псевдокода). В частности, это практическое задание поддерживает Python 2 и 3, но мы рекомендуем как можно скорее перейти на версию 3.x.
Cloud Shell — это удобная оболочка, доступная пользователям непосредственно из облачной консоли , и не требует локальной среды разработки, поэтому этот урок можно выполнить полностью в облаке с помощью веб-браузера. Cloud Shell особенно полезен, если вы разрабатываете или планируете продолжать разработку с использованием продуктов и API GCP . В частности, для этого практического занятия в Cloud Shell уже предварительно установлены обе версии Python.
В Cloud Shell также установлен IPython ... это интерактивный интерпретатор Python более высокого уровня, который мы рекомендуем, особенно если вы работаете в сфере анализа данных или машинного обучения. В этом случае IPython является интерпретатором по умолчанию для Jupyter Notebooks , а также для Colab , Jupyter Notebooks, размещенных Google Research.
IPython в первую очередь использует интерпретатор Python 3, но переключается на Python 2, если версия 3.x недоступна. Доступ к IPython можно получить через Cloud Shell, а также установить в локальной среде разработки. Выход осуществляется нажатием ^D (Ctrl-d), после чего необходимо принять предложение о выходе. Пример вывода при запуске ipython будет выглядеть следующим образом:
$ ipython Python 3.7.3 (default, Mar 4 2020, 23:11:43) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Если IPython вам не подходит, вполне допустимо использовать стандартный интерактивный интерпретатор Python (либо Cloud Shell, либо локальную среду разработки) (завершить работу можно с помощью ^D):
$ python Python 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> $ python3 Python 3.7.3 (default, Mar 10 2020, 02:33:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
В этом руководстве также предполагается, что у вас установлен инструмент установки pip (менеджер пакетов Python и средство разрешения зависимостей). Он входит в комплект версий 2.7.9+ или 3.4+. Если у вас более старая версия Python, см. это руководство для получения инструкций по установке. В зависимости от ваших прав доступа вам может потребоваться доступ с правами суперпользователя ( sudo ), но обычно это не требуется. Вы также можете явно использовать pip2 или pip3 для запуска pip для определенных версий Python.
В оставшейся части практического задания предполагается использование Python 3 — если инструкции для Python 2 будут существенно отличаться от инструкций для Python 3.x, они будут предоставлены отдельно.
*Создание и использование виртуальных сред
Этот раздел необязателен и необходим только тем, кому для выполнения этого практического задания требуется виртуальное окружение (согласно предупреждению в боковой панели выше). Если на вашем компьютере установлен только Python 3, вы можете просто выполнить эту команду для создания виртуального окружения с именем my_env (при желании можно выбрать другое имя):
virtualenv my_env
Однако, если на вашем компьютере установлены Python 2 и Python 3, мы рекомендуем установить виртуальное окружение Python 3, что можно сделать с помощью -p flag следующим образом:
virtualenv -p python3 my_env
Чтобы войти в созданное виртуальное окружение, "активируйте" его следующим образом:
source my_env/bin/activate
Убедитесь, что вы находитесь в нужной среде, обратив внимание на то, что в командной строке теперь перед именем вашей среды отображается её название, например:
(my_env) $
Теперь вы сможете pip install , выполнить код в этой среде и т.д. Еще одно преимущество заключается в том, что если вы все испортите, например, ваша установка Python будет повреждена, вы сможете удалить всю эту среду, не затронув остальную часть системы.
5. Установите клиентскую библиотеку Google API для Python.
Для выполнения этого практического задания требуется клиентская библиотека Google API для Python , поэтому либо установка будет простой, либо вам вообще ничего не потребуется.
Ранее мы рекомендовали вам использовать Cloud Shell для удобства. Вы можете пройти весь учебный курс из веб-браузера в облаке. Еще одна причина использовать Cloud Shell — это то, что многие популярные инструменты разработки и необходимые библиотеки уже предустановлены .
*Установите клиентские библиотеки
( необязательно ) Этот шаг можно пропустить, если вы используете Cloud Shell или локальную среду, где клиентские библиотеки уже установлены. Это необходимо сделать только в том случае, если вы разрабатываете локально и не установили (или не уверены, что установили) их. Самый простой способ — использовать pip (или pip3 ) для установки (включая обновление самого pip при необходимости):
pip install -U pip google-api-python-client oauth2client
Подтвердите установку
Эта команда устанавливает клиентскую библиотеку, а также все пакеты, от которых она зависит. Независимо от того, используете ли вы Cloud Shell или собственную среду, убедитесь, что клиентская библиотека установлена, импортировав необходимые пакеты, и подтвердите отсутствие ошибок импорта (и вывода информации):
python3 -c "import googleapiclient, httplib2, oauth2client"
Если вы используете Python 2 (из Cloud Shell), вы получите предупреждение о том, что его поддержка устарела:
******************************************************************************* Python 2 is deprecated. Upgrade to Python 3 as soon as possible. See https://cloud.google.com/python/docs/python2-sunset To suppress this warning, create an empty ~/.cloudshell/no-python-warning file. The command will automatically proceed in seconds or on any key. *******************************************************************************
Как только вы сможете успешно выполнить команду импорта "test" (без ошибок/вывода), вы будете готовы начать взаимодействовать с API Google!
Краткое содержание
Поскольку это вводный практический урок, предполагается, что вы новичок в использовании API Google и Google Workspace. Если у вас уже есть опыт создания проектов и создания идентификаторов клиентов OAuth для авторизации пользователей, создайте или используйте существующий проект, создайте или используйте существующий идентификатор клиента OAuth и пропустите следующие два модуля, перейдя сразу к разделу «Отображение вашего приложения для файлов и папок Google Диска» или сразу к разделу «Расширенное использование консоли разработчика», чтобы повторить эти шаги с меньшим количеством подсказок.
6. Укажите проект в консоли Cloud.
Для работы приложения с использованием API Google требуется проект. Управление проектами осуществляется в консоли разработчиков Google Cloud, или просто «devconsole». В этом практическом занятии мы будем использовать только API Google Drive, поэтому у нас есть волшебная ссылка (см. ниже в шаге 1), которая:
- Переводит вас в консоль разработчика.
- Пошагово описывает процесс создания нового проекта (или выбора существующего), и
- Автоматически включает API Google Диска
Давайте сделаем это!
- Перейдите по ссылке console.developers.google.com/start/api?id=drive и войдите в свой аккаунт Google.
- Если у вас ещё нет проектов, вы увидите этот экран с предложением принять Условия использования API Google :
После принятия условий будет создан новый проект с именем « Мой проект », и API Google Drive будет автоматически включен. 3. Если же вы уже создали проект (например, предыдущий кодовый пример?), вы увидите следующий экран:
При нажатии на выпадающее меню « Создать проект» выберите существующий проект или создайте новый.
После того, как вы сделаете свой выбор (новый или существующий проект), API Google Drive будет автоматически включен для вас. 4. Вы узнаете, что API Google Drive включен, получив следующее подтверждение:
5. Нажмите «Перейти к учетным данным» , чтобы перейти к следующему шагу.
7. *Авторизация API-запросов (авторизация пользователя)
Этот раздел можно пропустить, если вы уже создали учетные данные для авторизации пользователей и знакомы с этим процессом. Он отличается от авторизации служебных учетных записей, для которой используется другой метод, поэтому, пожалуйста, продолжайте ниже.
Введение в авторизацию (плюс некоторые аспекты аутентификации)
Для отправки запросов к API вашему приложению необходима соответствующая авторизация . Аутентификация , или, как её ещё называют, авторизация, описывает учетные данные для входа в систему — вы проходите аутентификацию при входе в свою учетную запись Google с помощью логина и пароля. После аутентификации следующим шагом является проверка того, имеете ли вы — или, точнее, ваш код — право доступа к данным, таким как файлы BLOB-объектов в Cloud Storage или личные файлы пользователя в Google Drive.
API Google поддерживают несколько типов авторизации, но наиболее распространенным для пользователей API Google Workspace является авторизация пользователя , поскольку в примере приложения в этом практическом руководстве используются данные конечных пользователей. Эти конечные пользователи должны предоставить вашему приложению разрешение на доступ к своим данным . Это означает, что ваш код должен получить учетные данные OAuth2 для доступа к учетной записи пользователя.
Чтобы получить учетные данные OAuth2 для авторизации пользователей, вернитесь в менеджер API и выберите вкладку «Учетные данные» в левой панели навигации:
Когда вы туда попадете, вы увидите все свои учетные данные в трех отдельных разделах:
Первый используется для ключей API , второй — для идентификаторов клиентов OAuth 2.0, а последний — для учетных записей служб OAuth2 — мы используем ту, что посередине.
Создание учетных данных
На странице «Учетные данные» нажмите кнопку «+ Создать учетные данные» вверху, после чего откроется диалоговое окно, в котором нужно выбрать «Идентификатор клиента OAuth:».
На следующем экране вам предстоит выполнить 2 действия: настроить экран согласия на авторизацию вашего приложения и выбрать тип приложения.
Если вы еще не настроили экран согласия, вы увидите предупреждение в консоли, и вам нужно будет сделать это сейчас. (Пропустите следующие шаги, если экран согласия уже настроен.)
Экран согласия OAuth
Нажмите на кнопку «Настроить экран согласия», где вы выберете приложение «Внешнее» (или «Внутреннее», если вы являетесь клиентом Google Workspace [ранее «Google Workspace»]):
Обратите внимание, что для целей этого упражнения не имеет значения, какой вариант вы выберете, поскольку вы не публикуете свой пример кода. Большинство людей выберут «Внешний», чтобы перейти к более сложному экрану, но вам на самом деле нужно заполнить только поле «Название приложения» вверху:
На данном этапе вам нужно только название приложения, поэтому выберите такое, которое отражает тематику вашего практического занятия, а затем нажмите «Сохранить» .
Создание идентификатора клиента OAuth (аутентификация учетной записи пользователя)
Теперь вернитесь на вкладку «Учетные данные», чтобы создать идентификатор клиента OAuth2 . Здесь вы увидите различные идентификаторы клиентов OAuth, которые можно создать:
Мы разрабатываем инструмент командной строки под названием «Другое» , поэтому выберите его, а затем нажмите кнопку «Создать ». Выберите имя идентификатора клиента, отражающее создаваемое вами приложение, или просто используйте имя по умолчанию, которое обычно звучит как «Другой клиент N ».
Сохранение ваших учетных данных
- Появится диалоговое окно с новыми учетными данными; нажмите ОК , чтобы закрыть его.
- Вернувшись на страницу «Учетные данные», прокрутите вниз до раздела «Идентификаторы клиентов OAuth2», найдите и нажмите значок загрузки.
в крайнем правом нижнем углу вашего недавно созданного идентификатора клиента.
- Откроется диалоговое окно для сохранения файла с именем
client_secret-LONG-HASH-STRING.apps.googleusercontent.com.jsonскорее всего, в папку «Загрузки» . Мы рекомендуем сократить имя до более простого, например,client_secret.json(именно такое имя используется в примере приложения), а затем сохранить его в каталог/папку, где вы будете создавать пример приложения в этом практическом задании.
Краткое содержание
Получив учетные данные, вы готовы получить доступ к API Google Drive из своего приложения, помня при этом, что цель идентификатора клиента OAuth заключается в том, что ваши пользователи должны предоставить вашему приложению разрешение на доступ к своим данным в Google Drive.
ПРИМЕЧАНИЕ : Более подробная информация о создании проектов, включении API и получении учетных данных вручную, то есть без использования «мастера», приведенного выше, будет доступна после завершения этого практического занятия для дальнейшего изучения.
8. Отображение файлов и папок вашего Google Диска.
Независимо от того, используете ли вы локальную среду разработки или Cloud Shell, в той же директории, где находится файл учетных данных client_id.json , создайте новый файл Python с именем drive_list.py и добавьте в него следующие строки кода:
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
Структура приложения
Данное приложение состоит из трех основных разделов:
- Импорт Python для подключения функциональности библиотеки.
- Получение учетных данных приложения
- Получение имен файлов и папок, а также MIME-типов из Google Диска пользователя и их отображение.
ПРИМЕЧАНИЕ : Более подробный анализ кода и построчное объяснение доступны после завершения этого практического занятия для дальнейшего изучения.
Запуск приложения
Назовите этот файл, например, drive_list.py . При первом запуске скрипт не будет иметь разрешения на доступ к файлам пользователя на Google Диске (вашем). При приостановленном выполнении вывод будет выглядеть примерно так:
$ python3 ./drive_list.py /usr/local/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Your browser has been opened to visit: https://accounts.google.com/o/oauth2/auth?client_id=LONG-STRING.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
Из местной среды развития
Выполнение скрипта командной строки приостанавливается, пока открывается окно браузера и отображается диалоговое окно разрешений OAuth2:

Здесь приложение запрашивает у пользователя разрешения, которые запрашивает код (через переменную SCOPES ). В данном случае это возможность просмотра метаданных файла из Google Диска пользователя. Да, в вашем коде эти области разрешений отображаются как URI, но они переводятся на язык, указанный в вашей локали, в диалоговом окне потока OAuth2. Пользователь должен явно предоставить разрешение на запрашиваемые разрешения, иначе часть кода, отвечающая за выполнение потока, вызовет исключение, и скрипт не продолжит работу.
ПРИМЕЧАНИЕ : У некоторых пользователей установлено несколько браузеров, и запрос на авторизацию может появляться в нежелательном браузере. В этом случае просто скопируйте весь URL-адрес из окна браузера, который вы не хотите использовать, и вставьте его в адресную строку браузера, который вы хотите использовать.
Из Cloud Shell
Если вы невнимательно следили за процессом и запускали программу в Cloud Shell, окно браузера не открывалось, и вы оказывались в тупике. Обратите внимание, что диагностическое сообщение внизу предназначалось именно вам... вот это:
If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
При таком способе запуска вы получите следующий результат:
$ python3 drive_list.py --noauth_local_webserver /usr/local/lib/python3.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code Enter verification code:
Следуя инструкциям и перейдя в другую вкладку браузера по этому URL-адресу, вы получите практически идентичный опыт, описанный выше для локальных сред разработки. Ключевое отличие заключается в конце, где появляется еще один экран с кодом подтверждения, который необходимо ввести в Cloud Shell:

Скопируйте и вставьте этот код в окно терминала.
Краткое содержание
После того, как пользователь нажмет «Разрешить» и/или вставит проверочный код в поле ввода, приложение продолжит работу, поэтому ожидайте увидеть вывод, состоящий из файлов/папок Google Диска и их MIME-типов. Вот пример из одной из наших тестовых учетных записей:
$ python3 ./drive_list.py Travel expenses application/vnd.google-apps.spreadsheet Gmail Add-ons codelab application/vnd.google-apps.script Google Workspace Developer Intro application/vnd.google-apps.presentation Baseball Sheets application/vnd.google-apps.folder My Resume application/vnd.google-apps.document . . .
Обратите внимание, что при последующих запусках запрос на авторизацию больше не появляется (поскольку данные кэшируются библиотеками аутентификации), и вы сразу переходите к выводу. Разве не здорово впервые увидеть свои документы в терминале? Мы так думаем!
9. Заключение
Теперь вы готовы узнать больше о возможностях API Google Drive или изучить другие API Google Workspace (Gmail, Google Docs, Sheets, Slides, Calendar) и другие API Google (Maps, Analytics, YouTube и т. д.). Поздравляем, что вы дошли до конца!
Код, представленный в этом практическом занятии, также доступен в репозитории GitHub по адресу github.com/googlecodelabs/gsuite-apis-intro . (Мы стремимся поддерживать актуальность этого практического занятия в соответствии с репозиторием.) Готовы двигаться дальше? Ниже приведены различные ресурсы, которые помогут вам глубже изучить материал, рассматриваемый в этом практическом занятии, или если вы хотите расширить свой кругозор и исследовать другие способы программного доступа к технологиям Google.
Как уже упоминалось ранее, если вы не являетесь опытным разработчиком на Python, мы предлагаем вам повторить этот пример из Codelab на вашем любимом языке программирования. Клиентские библиотеки для поддерживаемых языков доступны здесь .
Дополнительное исследование
Теперь, когда у вас есть некоторый опыт работы с API Google Drive, ниже приведены несколько рекомендуемых упражнений для дальнейшего развития ваших навыков:
- ZIP-файлы : Напишите приложение, которое создает резервные копии нескольких ZIP-архивов на Google Диск, распаковывая их на лету так, чтобы имя каждого ZIP-файла совпадало с именем папки, в которую эти файлы помещаются. ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ: поддержка рекурсивного создания ZIP-архивов внутри других ZIP-файлов с папками Google Диска, встроенными в другие папки. Если вы сдадитесь, посмотрите этот пример приложения на Node.js.
- Фотоальбомы : Напишите начало инструмента для создания фотоальбомов, который загружает несколько изображений на Google Диск, организуя их в отдельные папки по временной метке и геолокации. ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ: найдите библиотеку для обработки изображений с открытым исходным кодом и объедините все фотографии в каждой папке, чтобы они отражали события, которые вы могли пережить (путешествие, ужин и т. д.).
- Изучите GCP : напишите приложение, которое связывает Google Workspace и Google Cloud Platform (GCP). Напишите инструмент для резервного копирования файлов изображений из Google Drive в Google Cloud Storage (GCS), еще одно решение для «хранилища файлов в облаке». Как ни удивительно, использовать GCS будет проще, чем Drive, благодаря его продвинутым клиентским библиотекам.
- Анализ и запись : Расширьте ваше решение для пункта №3, проанализировав каждое изображение, резервная копия которого была передана в API Google Cloud Vision, и получив верхние (3, 5, 10) «метки» того, что API видит на этих изображениях. Для каждого изображения запишите строку в Google Sheets, содержащую результаты анализа из Cloud Vision, а также местоположение резервной копии в GCS. Если вы сдадитесь, посмотрите этот пример кода на Python .
10. Дополнительные ресурсы
Документация
- Документация по API Google Drive (REST API и нативный SDK/API для Android)
- Документация по другим API Google Workspace
- Документация по другим API Google
- Клиентские библиотеки API Google
- Документация OAuth2
Видео по теме и общие видеоролики
- Создание новых проектов Google API ( статья в блоге и видео )
- Обзор шаблонного кода авторизации на Python ( видео )
- Список файлов в Google Диск ( видео , статья в блоге )
- Видеотека Google Drive API
- Видеокурс Launchpad Online (предшественник...)
- Видеосерия Google Workspace Dev Show
Новости и обновления
- Блог разработчиков Google Workspace
- Пользователи Twitter Google Workspace (@GSuiteDevs)
- Ежемесячная рассылка для разработчиков Google Workspace
Другие семинары по кодированию
Введение
- [Apps Script] Введение в Google Apps Script
Средний
- [Apps Script] Инструмент командной строки CLASP Apps Script
- [Apps Script] Дополнения для Gmail
- [Apps Script] Дополнение Docs и API обработки естественного языка GCP
- [Apps Script] Фреймворк для чат-бота Hangouts
- [REST API] Инструмент для создания пользовательских отчетов (API таблиц)
- [REST API] Пользовательский генератор слайдов для лицензии Github Анализатор BigQuery (API для слайдов и BigQuery)
Передовой
- [REST API] Рабочий процесс обработки изображений в облаке (API Drive, Cloud Storage, Cloud Vision, Sheets)
Справочные приложения
- Конвертер Markdown в Google Slides (REST API для Slides)
11. *Подробное описание применения
Этот необязательный раздел предназначен для самостоятельного изучения после завершения занятия с целью восполнения пробелов в знаниях или для дальнейших исследований.
Импорт Python для подключения функциональности библиотеки.
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
- Первый оператор
importпозволяет запускать этот код на Python 2 — его можно полностью удалить, если вы используете только Python 3. - Одно из правил стиля Python — разделять импорт стандартных библиотек и сторонних модулей; именно для этого и нужна пустая строка.
- Следующие три импорта добавляют необходимые классы и функции из клиентской библиотеки Google API... все они необходимы для написания этого приложения. Вкратце, вот что они делают:
-
googleapiclientспециализируется на подключении к API Google. -
httplib2предоставляет HTTP-клиент для использования приложением. -
oauth2clientпомогает нам управлять учетными данными OAuth2.
Авторизация и получение учетных данных приложения.
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
- Области разрешений приложения
SCOPES— это разрешения, которые приложение запрашивает у пользователя, запускающего его. Для обеспечения безопасности пользовательских данных приложения не могут работать без предоставления им необходимых разрешений. - Рекомендуется использовать максимально строгие разрешения, необходимые вашему приложению для корректной работы. Почему?
- Разве не раздражает, когда приложение запрашивает большой набор разрешений при установке или запуске? Угадайте, что? Теперь вы находитесь по другую сторону медали, запрашивая у пользователей все эти разрешения. Использование более ограниченных областей доступа создает у пользователей больше уверенности при установке вашего приложения, потому что вы запрашиваете меньше прав доступа.
- Практически все области видимости выглядят как длинные URL-адреса, и область видимости метаданных Google Диска не является исключением.
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
- Для связи приложений с серверами Google необходим токен. Действительные токены, полученные от Google, сохраняются в файле хранилища токенов
storage.json. Если вы не сохраните эти токены, вам придется повторно авторизовывать приложение каждый раз при его запуске.
store = file.Storage('storage.json')
- Это приложение сначала проверяет, есть ли у нас уже действительные учетные данные в хранилище (см. условное выражение в операторе
if).
creds = store.get()
if not creds or creds.invalid:
- Если у вас отсутствуют или истек срок действия учетных данных, необходимо создать новый поток авторизации [с помощью
oauth2client.client.flow_from_clientsecrets()] на основе вашего идентификатора и секрета клиента OAuth из файлаclient_id.json, который вы скачали.
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
- После того, как в вашем приложении появится поток, его необходимо выполнить, чтобы отобразить пользователю экран разрешений OAuth2 [с помощью
oauth2client.tools.run_flow()], описанный и проиллюстрированный выше.
creds = tools.run_flow(flow, store)
- Нажав кнопку «Разрешить» , пользователи дают согласие на доступ вашего приложения к метаданным их файлов в Google Диск, а серверы Google возвращают токены для доступа к API. Они возвращаются в качестве
credsи кэшируются в файлеstorage.json. - На этом этапе ваше приложение теперь имеет действительные учетные данные для выполнения вызовов API. Вызов
googleapiclient.discovery.build()создает конечную точку сервиса для используемого вами API. - Для использования
build()передайте имя API ('drive') и желаемую версию (в настоящее время'v3'). - Последний параметр — это HTTP-клиент, используемый для зашифрованных вызовов API.
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
Получить и отобразить первые 100 файлов/папок и MIME-типов Google Диска.
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
- Следующая строка кода вызывает метод
list()из коллекцииfiles()API Google Диска для формирования запроса, который немедленно вызывается с помощьюexecute(). В результате возвращаетсяdictPython, из которого мы запрашиваем ключ'files', чтобы получить 100 имен файлов и папок из Google Диска пользователя (или меньше, если файлов меньше). - Почему 100? Это значение по умолчанию, заданное функцией
DRIVE.files().list(). Если вы хотите изменить это число, например, до 10 файлов или 1000, добавьте параметрpageSizeк вашему запросу:DRIVE.files().list(pageSize=10). Более подробная информация о параметрах приведена в документации . - В заключительной части скрипта выполняется перебор каждого файла и отображается его имя и MIME-тип.
Вы написали свое первое приложение, использующее REST API Google... поздравляем! За исключением импорта и кода авторизации, этот скрипт действительно состоит всего из нескольких строк кода (то, что вы видите выше). Большинство API Google работают аналогичным образом, и вам нужно будет только создать конечные точки сервиса для каждого из них, который вы хотите использовать.
Использование более чем одного API Google в приложении
Да, вы, безусловно, можете использовать более одного API в одном приложении! Вот фрагмент кода на Python для приложения, которое повторно использует один и тот же HTTP-клиент и создает конечные точки сервисов для трех API Google (да, также с 3 различными SCOPES ):
SCOPES = (
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/spreadsheets.readonly',
'https://www.googleapis.com/auth/presentations',
)
. . .
HTTP = creds.authorize(Http())
DRIVE = discovery.build('drive', 'v3', http=HTTP)
SHEETS = discovery.build('sheets', 'v4', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)
Мы предполагаем, что этот код может быть частью приложения, которое генерирует несколько презентаций (Slides API) на основе данных из электронных таблиц (Sheets API) и использует шаблон слайда, который копируется (Drive API) для каждой сгенерированной презентации. Хотя такого приложения пока не существует, вы можете создать нечто подобное, используя два существующих примера, созданных командой Google Workspace, в качестве строительных блоков:
- Замена текста и изображений на слайдах ( статья в блоге и видео ) — используется API Google Drive для копирования шаблона презентации, а затем API Slides для изменения текстовых и графических заполнителей.
- Создание слайдов на основе данных из электронных таблиц ( статья в блоге и видео ) — считывает данные из электронной таблицы (API Sheets) и создает слайды (API Slides) на основе этих данных.
Ваша задача: создать это приложение!
12. *Расширенное использование консоли разработчика
В этом необязательном разделе мы опишем, как создавать проекты в консоли разработчика, включать API и получать учетные данные, и все это без использования мастера, как в приведенном выше примере. Это предназначено для пользователей среднего уровня, которые уже умеют делать это вручную или хотят научиться это делать.
Укажите проект в консоли Cloud.
При разработке любого приложения с использованием API Google вам необходим проект. Вы можете либо использовать существующий проект, либо создать новый. Это происходит в консоли Cloud. Некоторые учебные пособия предоставляют «волшебную ссылку» (например, мастер настройки), которая позволяет быстро начать работу, минуя многие необходимые шаги. Но не все из них это делают, поэтому это лишь общие инструкции по созданию проектов.
Вы можете создавать проекты с большинства экранов консоли Cloud, если вошли в систему, используя свои учетные данные Google, и видите выпадающее меню проектов в верхней части консоли. Обратите внимание, что большинство скриншотов здесь сделаны из API Manager, также известного как консоль разработчика (к ней легко получить доступ, щелкнув «API Manager» в левой панели навигации или напрямую перейдя в браузере по адресу console.developers.google.com ).
- Если у вас пока нет проектов, вас могут направить на...
- Страница «Панель управления» :
- Страница библиотеки :
- или совершенно пустая страница:
Если у вас произойдет третья ошибка, просто обновите страницу браузера, чтобы перейти на страницу библиотеки .
- Независимо от того, находитесь ли вы на странице «Панель управления» или «Библиотека» , щелкните селектор проекта в верхней части страницы:
- Next, you'll get the selector dialog. Click on the "+" on the right-hand side to create a new project:
- After you click the "+", a New Project page will appear. All consumer accounts get 12 projects by default. Before creating your first project, you'll have to accept the Google APIs Terms of Service :
After you've done this, the email solicitation and Terms of Service questions go away when creating future projects:
5. If you've created at least one project in the past, after login, you'll be taken to the dashboard of the last project you worked on. From there, create a new project as you would be choosing Select a project > + . 6. Once your new project has been created, you'll be back on the Dashboard page:
You've now created a project successfully and are ready to move on by choosing the APIs you wish to use for your project.
Включить API Google
Before you can begin using Google APIs, you must enable them. The example below shows what you would do to enable the Cloud Vision API. In this codelab, you may be using one or more APIs, and should follow similar steps to enable them before usage.
Из Cloud Shell
Using Cloud Shell, you can enable the API by using the following command:
gcloud services enable vision.googleapis.com
Из облачной консоли
You may also enable the Vision API in the API Manager. From the Cloud Console, go to API Manager and select, "Library."
In the search bar, start typing, "vision," then select Vision API when it appears. It may look something like this as you're typing:
Select the Cloud Vision API to get the dialog you see below, then click the "Enable" button:
Расходы
While many Google APIs can be used without fees, use of GCP (products & APIs) is not free. When enabling the Vision API (as described above), you may be asked for an active billing account. The Vision API's pricing information should be referenced by the user before enabling. Keep in mind that certain Google Cloud Platform (GCP) products feature an "Always Free" tier for which you have to exceed in order to incur billing. For the purposes of the codelab, each call to the Vision API counts against that free tier, and so long as you stay within its limits in aggregate (within each month), you should not incur any charges.
Some Google APIs, ie, Google Workspace, has usage covered by a monthly subscription, so there's no direct billing for use of the Gmail, Google Drive, Calendar, Docs, Sheets, and Slides APIs, for example. Different Google products are billed differently, so be sure to reference your API's documentation for that information.
Краткое содержание
In this codelab, you only need to turn on the Google Drive API, so follow the instructions above and search for "Drive". Proceed forward once it's enabled.
Authorize API requests (user authorization)
Intro to authorization (plus some authentication)
In order to make requests to the APIs, your application needs to have the proper authorization . Authentication , a similar word, describes login credentials—you authenticate yourself when logging into your Google account with a login & password. Once authenticated, the next step is whether you are—or rather, your code , is— authorized to access data, such as blob files on Cloud Storage or a user's personal files on Google Drive.
Google APIs support several types of authorization, but the one most common for Google Workspace API users is user authorization since the example application in this codelab accesses data belonging to end-users. Those end-users must grant permission for your app to access their data . This means your code must obtain user account OAuth2 credentials.
To get OAuth2 credentials for user authorization, go back to the API manager and select the "Credentials" tab on the left-nav:
When you get there, you'll see all your credentials in three separate sections:
The first is for API keys , the second OAuth 2.0 client IDs, and the last OAuth2 service accts —we're using the one in the middle.
Creating credentials
From the Credentials page, click on the + Create Credentials button at the top, which then gives you a dialog where you'd choose "OAuth client ID:"
On the next screen, you have 2 actions: configuring your app's authorization "consent screen" and choosing the application type:
If you have not set a consent screen, you will see the warning in the console and would need to do so now. (Skip this these next steps if your consent screen has already been setup.)
Экран согласия OAuth
Click on "Configure consent screen" where you select an "External" app (or "Internal" if you're a Google Workspace customer):
Note that for the purposes of this exercise, it doesn't matter which you pick because you're not publishing your codelab sample. Most people will select "External" to be taken to a more complex screen, but you really only need to complete the "Application name" field at the top:
The only thing you need at this time is just an application name so pick someone that reflects the codelab you're doing then click Save .
Creating OAuth client ID (user acct auth)
Now go back to the Credentials tab to create an OAuth2 client ID . Here you'll see a variety of OAuth client IDs you can create:
We're developing a command-line tool, which is Other , so choose that then click the Create button. Choose a client ID name reflecting the app you're creating or simply take the default name, which is usually, "Other client N ".
Saving your credentials
- A dialog with the new credentials appears; click OK to close
- Back on the Credentials page, scroll down to the "OAuth2 Client IDs" section find and click the download icon
to the far right bottom of your newly-created client ID.
- This open a dialog to save a file named
client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json, likely to your Downloads folder. We recommend shortening to an easier name likeclient_secret.json(which is what the sample app uses), then save it to the directory/folder where you'll be creating the sample app in this codelab.