Работа с Google Docs API в Python

В этой статье мы пройдём по этой инструкции и проясним неочевидные моменты.

Вам понадобятся:

  • Python 3;
  • PyCharm;
  • аккаунт Google;
  • страница в Google Docs.

Создание проекта

Создайте проект в PyCharm с виртуальным окружением (это настройка включена по умолчанию).

Получение доступа к Google Docs API

Для начала необходимо получить доступ к API. Перейдите по этой ссылке и нажмите кнопку “ENABLE THE GOOGLE DOCS API”.

Скачайте файл с аутентификационными данными credentials.json кнопкой “DOWNLOAD CLIENT CONFIGURATION” и добавьте его в проект (перетащите в PyCharm или в папку проекта).

Установка необходимых модулей

Установите в PyCharm необходимые модули в виртуальное окружение Вашего проекта. Для этого перейдите в настройки (в меню “File” -> “Settings” или через Cmd+,). Откройте настройки интерпретатора проекта “Project: ИМЯПРОЕКТА” -> “Project Interpreter”. Нажмите кнопку “+” справа сверху. По очереди введите название каждого модуля в строку поиска и нажмите “Install Package”.

Вам понадобятся:

  • google-api-python-client
  • google-auth-httplib2
  • google-auth-oauthlib

То же самое можно сделать через кнопку “Terminal” внизу и одну команду:

pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib

Написание кода

Создайте в проекте на том же уровне с файлом credentials.json (это важно!) файл со следующим кодом:

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

# Права нашего приложения.
SCOPES = ['https://www.googleapis.com/auth/documents.readonly']

# Сюда необходимо скопировать идентификатор вашей страницы. Например, для URL:
# https://docs.google.com/document/d/195j9eDD3ccgjQRttHhJPymLJUCOUjs-jmwTrekvdjFE/edit
# идентификатором будет 195j9eDD3ccgjQRttHhJPymLJUCOUjs-jmwTrekvdjFE
DOCUMENT_ID = '195j9eDD3ccgjQRttHhJPymLJUCOUjs-jmwTrekvdjFE'

creds = None
if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = pickle.load(token)
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()
    with open('token.pickle', 'wb') as token:
        pickle.dump(creds, token)

service = build('docs', 'v1', credentials=creds)

document = service.documents().get(documentId=DOCUMENT_ID).execute()

print('The title of the document is: {}'.format(document.get('title')))

Запуск

При первом запуске программа потребует авторизацию хозяина аккаунта на просмотр документов.

Что дальше?

Изучаем инструкции, справочник и примеры.

Общий для всех API от Google инструмент - APIs Explorer, позволяет легко получать список доступных методов, и вызывать их прямо из браузера.

Например, получить текст документа с данными о всех стилях каждого отрывка можно вот так:

import json # Этот модуль используем, чтобы "отформатировать" результат.
print(json.dumps(document['body']['content'], indent=1))

Вывод:

[
 {
  "endIndex": 1,
  "sectionBreak": {
   "sectionStyle": {
    "columnSeparatorStyle": "NONE",
    "contentDirection": "LEFT_TO_RIGHT"
   }
  }
 },
 {
  "startIndex": 1,
  "endIndex": 25,
  "paragraph": {
   "elements": [
    {
     "startIndex": 1,
     "endIndex": 25,
     "textRun": {
      "content": "Hello from Google Docs!\n",
      "textStyle": {}
     }
    }
   ],
   "paragraphStyle": {
    "namedStyleType": "NORMAL_TEXT",
    "direction": "LEFT_TO_RIGHT"
   }
  }
 },
 {
  "startIndex": 25,
  "endIndex": 26,
  "paragraph": {
   "elements": [
    {
     "startIndex": 25,
     "endIndex": 26,
     "textRun": {
      "content": "\n",
      "textStyle": {}
     }
    }
   ],
   "paragraphStyle": {
    "namedStyleType": "NORMAL_TEXT",
    "direction": "LEFT_TO_RIGHT"
   }
  }
 }
]