Воспользуйтесь всеми преимуществами всех функций и данных Google Analytics, используя REST API и Python.

Google Analytics может дать много информации о трафике и о пользователях, посещающих ваш сайт. Многие из этих данных доступны в удобном формате в веб-консоли, но что, если вы хотите построить свои собственные диаграммы и визуализации, обработать данные дальше или просто работать с ними программно? В этом вам может помочь Google Analytics API, и в этой статье мы рассмотрим, как вы можете использовать его для запроса и обработки данных аналитики в реальном времени с помощью Python.

Изучение API

Прежде чем приступить к использованию какого-либо конкретного API Google, неплохо было бы сначала поиграть с некоторыми из них. Используя обозреватель API Google, вы можете узнать, какой API будет для вас наиболее полезным, а также поможет определить, какой API включить в консоли Google Cloud.

Мы начнем с Real Time Reporting API, так как нас интересуют данные аналитики в реальном времени, обозреватель API которых доступен здесь. Чтобы найти другие интересные API, посетите целевую страницу отчетов, откуда вы можете перейти к другим API и их обозревателям.

Чтобы этот конкретный API работал, нам нужно предоставить как минимум 2 значения — ids и metrics. Первый из них — это так называемый идентификатор таблицы, который является идентификатором вашего профиля аналитики. Чтобы найти его, перейдите на панель аналитики, нажмите Администрирование внизу слева, затем выберите Настройки просмотра, где вы найдете идентификатор в ИД просмотра поле. Для этого API вам необходимо предоставить идентификатор в формате ga:<TABLE_ID>.

Другое значение, которое вам понадобится, — это метрика. Вы можете выбрать один из столбцов метрик здесь. Для API реального времени вам понадобится либо rt:activeUsers, либо rt:pageviews.

Установив эти значения, мы можем щелкнуть «Выполнить» и изучить данные. Если данные выглядят хорошо, и вы определили, что это тот API, который вам нужен, то пришло время включить его и настроить для него проект…

Настройка

Чтобы получить доступ к API, нам нужно сначала создать проект в Google Cloud. Для этого перейдите в Cloud Resource Manager и нажмите Создать проект. Кроме того, вы можете сделать это также через CLI с помощью gcloud projects create $PROJECT_ID. Через несколько секунд вы увидите новый проект в списке.

Далее нам нужно включить API для этого проекта. Вы можете найти все доступные API в Библиотеке API. Интересующий нас — Google Analytics Reporting API — можно найти здесь.

Теперь API готов к использованию, но нам нужны учетные данные для доступа к нему. Существует несколько различных типов учетных данных в зависимости от типа приложения. Большинство из них подходят для приложений, требующих согласия пользователя, таких как клиентские приложения или приложения для Android/iOS. Тот, который подходит для нашего варианта использования (запрос данных и локальная обработка), использует сервисные аккаунты.

Чтобы создать сервисный аккаунт, перейдите на страницу учетных данных, нажмите Создать учетные данные и выберите Сервисный аккаунт. Дайте ему какое-нибудь имя и запишите идентификатор учетной записи службы (второе поле), он понадобится нам через секунду. Нажмите Создать и продолжить (предоставлять права доступа или разрешения сервисному аккаунту не требуется).

Затем на странице Учетная запись службы выберите только что созданную учетную запись службы и перейдите на вкладку Ключи. Нажмите Добавить ключ и Создать новый ключ. Выберите формат JSON и загрузите его. Обязательно сохраните его в безопасном месте, так как его можно использовать для доступа к вашему проекту в учетной записи Google Cloud.

После этого у нас теперь есть проект с включенным API и учетная запись службы с учетными данными для программного доступа к нему. Однако этот сервисный аккаунт не имеет доступа к вашему представлению Google Analytics, поэтому он не может запрашивать ваши данные. Чтобы это исправить, вам нужно добавить ранее упомянутый идентификатор сервисного аккаунта ( [email protected]) в качестве пользователя в Google Analytics с доступом Чтение и анализ — руководство по добавлению пользователей можно найти здесь.

Наконец, нам нужно установить клиентские библиотеки Python, чтобы использовать API. Нам нужно 2 из них, один для аутентификации и один для реальных API Google:

Основные запросы

Со всем этим давайте напишем наш первый запрос:

Мы начинаем с аутентификации в API, используя учетные данные JSON для нашей учетной записи службы (загруженной ранее) и ограничивая область действия учетных данных только аналитическим API, доступным только для чтения. После этого мы создаем службу, которая используется для запросов к API — функция build принимает имя API, его версию и ранее созданный объект учетных данных. Если вы хотите получить доступ к другому API, посмотрите этот список для доступных имен и версий.

Наконец, мы можем запросить API — мы устанавливаем ids, metrics и, возможно, dimensions, как мы делали ранее с API Explorer. Вам может быть интересно, где я нашел методы объекта service (.data().realtime().get(...)) — все они задокументированы здесь.

И когда мы запустим приведенный выше код, print(...) покажет нам что-то вроде этого (обрезано для удобочитаемости):

Это работает, но, учитывая, что результатом является словарь, вы, вероятно, захотите получить доступ к отдельным полям результата:

В предыдущем примере показано использование метода realtime() API, но есть еще два, которые мы можем использовать. Первый из них ga():

Этот метод возвращает исторические (не в реальном времени) данные из Google Analytics, а также имеет больше аргументов, которые можно использовать для указания временного диапазона, уровня выборки, сегментов и т. д. Этот API также имеет дополнительные обязательные поля — start_date и end_date.

Вы, наверное, также заметили, что метрики и измерения для этого метода немного отличаются — это потому, что каждый API имеет свой собственный набор метрик и измерений. Они всегда имеют префикс имени API — в данном случае ga: вместо rt: ранее.

Третий доступный метод .mcf() предназначен для данных многоканальных последовательностей и выходит за рамки этой статьи. Если это звучит полезно для вас, ознакомьтесь с документами.

Последнее, о чем следует упомянуть, когда речь заходит об основных запросах, — это нумерация страниц. Если вы создаете запросы, которые возвращают много данных, вы можете в конечном итоге исчерпать лимиты запросов и квоты или столкнуться с проблемами при обработке всех данных одновременно. Чтобы избежать этого, вы можете использовать пагинацию:

В приведенном выше фрагменте мы добавили start_index='1' и max_results='2' для принудительной нумерации страниц. Это приводит к заполнению previousLink и nextLink, которые можно использовать для запроса предыдущей и следующей страниц соответственно. Однако это не работает для аналитики в реальном времени с использованием метода realtime(), так как в нем отсутствуют необходимые аргументы.

Метрики и параметры

Сам API довольно прост. Часть, которая очень настраиваема, — это аргументы, такие как metrics и dimensions. Итак, давайте лучше рассмотрим все аргументы и их возможные значения, чтобы увидеть, как мы можем в полной мере использовать преимущества этого API.

Начнем с метрик — есть 3 самых важных значения на выбор — rt:activeUsers, rt:pageviews и rt:screenViews:

  • rt:activeUsers дает вам количество пользователей, просматривающих ваш сайт в данный момент, а также их атрибуты
  • rt:pageviews сообщает вам, какие страницы просматривают пользователи
  • rt:screenViews — то же, что и просмотры страниц, но актуально только внутри приложения, например. Андроид или iOS

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

  • metrics='rt:activeUsers', dimensions='rt:userType' – Различайте активных пользователей в зависимости от того, новые они или возвращающиеся.
  • metrics='rt:pageviews', dimensions='rt:pagePath' - Текущие просмотры страниц с разбивкой по путям.
  • metrics='rt:pageviews', dimensions='rt:medium,rt:trafficType' — Просмотры страниц с разбивкой по каналам (например, электронная почта) и типу трафика (например, органический).
  • metrics='rt:pageviews', dimensions='rt:browser,rt:operatingSystem' — Просмотры страниц с разбивкой по браузерам и операционным системам.
  • metrics='rt:pageviews', dimensions='rt:country,rt:city' - Просмотры страниц с разбивкой по странам и городам.

Как вы можете видеть, есть много данных, которые можно запросить, и из-за огромного количества может потребоваться их фильтрация. Для фильтрации результатов можно использовать аргумент filters. Синтаксис довольно гибкий и поддерживает арифметические и логические операторы, а также запросы регулярных выражений. Давайте рассмотрим несколько примеров:

  • rt:medium==ORGANIC — показывать только посещения страниц из органического поиска
  • rt:pageviews>2 - показывать только те результаты, которые имеют более 2 просмотров страниц
  • rt:country=~United.*,ga:country==Canada — показывать посещения только из стран, начинающихся с «United» (Великобритания, США) или Канады (, действует как оператор OR, для AND используйте ;).

Полную документацию по фильтрам смотрите на этой странице.

Наконец, чтобы сделать результаты более читабельными или более простыми в обработке, вы также можете отсортировать их с помощью аргумента sort. Для сортировки по возрастанию вы можете использовать, например. sort=rt:pagePath, а для убывания вы добавите -, например. sort=-rt:pageTitle.

Помимо API реального времени

Если вы не можете найти некоторые данные или вам не хватает некоторых функций в Realtime Analytics API, вы можете попробовать изучить другие API Google Analytics. Одним из них может быть Reporting API v4, который имеет некоторые улучшения по сравнению со старыми API.

Однако у него также немного другой подход к построению запросов, поэтому давайте рассмотрим пример, чтобы вы начали:

Как видите, этот API не предоставляет большого количества аргументов, которые вы можете заполнить, вместо этого он имеет один аргумент body, который принимает тело запроса со всеми значениями, которые мы видели ранее.

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

Заключительные мысли

Несмотря на то, что в этой статье показано только использование аналитических API, она должна дать вам общее представление о том, как использовать все API Google с Python, поскольку все API в клиентской библиотеке используют один и тот же общий дизайн. Кроме того, аутентификация, показанная ранее, может быть применена к любому API, все, что вам нужно изменить, это область действия.

Хотя в этой статье использовалась библиотека google-api-python-client, Google также предоставляет облегченные библиотеки для отдельных сервисов и API по адресу https://github.com/googleapis/google-cloud-python. На момент написания конкретная библиотека для аналитики все еще находится в стадии бета-тестирования и не имеет документации, но когда она станет общедоступной (или более стабильной), вам, вероятно, стоит подумать о ее изучении.

Эта статья изначально была опубликована на martinheinz.dev