Как узнать мой client id google sheets
Перейти к содержимому

Как узнать мой client id google sheets

  • автор:

Что такое Client ID в Google Analytics

Client ID — это уникальный идентификатор, который отправляется в Google Analytics вместе с каждым обращением с сайта и позволяет связать эти обращения с одним пользователем. Обычно он выглядит вот так:

Когда читатель заходит на сайт, библиотека analytics.js, которая подключается при установке счетчика, отправляет в Google Analytics запрос, содержащий различную информацию о факте посещения: url посещенной страницы, её название, referrer, приведший пользователя, размер окна, язык, кодировку, идентификатор пользователя, номер счетчика, куда это все надо сложить, и т.д.

Именно Client ID позволяет связывать такие обращения и относить их к одному и тому же пользователю, но конечно не без нюансов.

Содержание

Где найти Client ID

Client ID хранится в cookies, и поэтому определяет уникальность пользователя только в рамках этого конкретного браузера. Если читатель почистит cookies, зайдет под инкогнито, с другого браузера, с телефона, то для Google Analytics он станет еще одним пользователем.

Короче, по-пацански должно быть так:

Client ID в отчетах пользователей Google Analytics

В Google Chrome свой Client ID для определенного сайта можно увидеть, нажав F12, далее вкладка Application, слева Cookies, выбираете сайт и находите _ga .

Client ID в cookies

Здесь к идентификатору добавляется еще служебная информация для парсера, распишу, что какая часть означает:

  • Первая часть (GA1) всегда такая и указывает версию формата записи идентификатора в cookie
  • Вторая зависит от уровня домена, для которого установлена _ga , т.е. для доменов первого и второго уровней она равна 1, для третьего — 2
  • Третья представляет собой случайно сгенерированное число
  • Четвертая показывает Unix Timestamp в секундах, когда Client ID был создан.

Отчет в GA по Client ID

В марте 2016 года в Google Analytics появился отчет Статистика пользователей. Его можно найти в разделе Аудитория и в нём доступна история обращений для каждого Client ID, а так же некоторая информация об этом пользователе.

Отчет по Client ID в Google Analytics

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

Этот отчет очень полезен при отладке, особенно, когда надо проследить, куда делись рекламные клики ��

upd: Не так давно поиск все-таки появился, но способ по-прежнему валиден.

Как получить Client ID

Встроенный отчет однако не поможет, когда потребуется посмотреть Client ID в разных разрезах, отфильтровать в сегменте, или сгруппировать с другими параметрами, поэтому очень часто его дополнительно передают в Google Analytics в качестве Пользовательского параметра.

Для этой цели лучше всего подойдет параметр уровня Пользователь, который можно создать в разделе АдминистраторРесурсПользовательские определенияПользовательские параметры. Подробно о создании пользовательских параметров Рома всё разжевал в своем блоге.

Достать Client ID программно можно разными способами. Google рекомендует брать из объекта счетчика:

На серверной стороне можно достать его из cookies. Некоторые делают это и на клиентской, но я конечно не советую. Если пользователь заходит на сайт впервые, то cookie _ga у него отсутствует, и может не успеть сформироваться к тому моменту, когда вы захотите её взять, в итоге дополнительный код и костыли.

Как передать Client ID в Google Analytics

После того как Google представил метод customTask в интерфейсе заданий analytics.js (есть только в английской документации), он стал лучшим способом передачи Client ID в Google Analytics. Благодаря этому методу читатель может вмешаться в запрос, который отправляется вместе с первоначальным хитом, и добавить в него передачу идентификатора пользователя в нужный Пользовательский параметр. Об этом у меня есть отдельная статья "Как передать Client ID через customTask"

Ранее Client ID лучше всего было передавать отдельным событием. У этого метода есть определенные недостатки, тем не менее многие им еще пользуются.

Что касается Яндекс Метрики

Возможно читатель захочет увидеть гугловский Client ID в тамошних отчетах, по такому поводу у Яндекса используется Параметры посетителей. В Tag Manager создаем переменную типа Собственный код JavaScript со следующим содержимым:

Далее передаем её в счетчик при установке:

Как создать Client ID

Вместо абуза идентификатора, который сотворяет analytics.js, читатель может использовать собственный. Google analytics прекрасно воспринимает UUID, о чем сказано в документации.

Собственный Client ID может пригодиться, если вы категорически против посторонних скриптов на своем сайте, особенно в его части с персональными данными (что абсолютно нормально), но все-таки определенные функции Google Analytics вам нужны.

Google Sheets API + Python. Чтение и запись с Сервисным Аккаунтом Google Cloud

Google Sheet и Sheets API — классный (простой, бесплатный и универсальный) способ организовать хранение и анализ данных получаемых от своего сервиса. При условии что этих данных не то чтобы очень много и поступают они не то чтобы очень часто.

У меня таких задач хватает и решаю я их либо на Python, либо на PHP. Сегодня возьму в руки Python.

Доступ к Google API

Чтобы писать из кода в Google Sheet нам нужен доступ к Google Sheets API, которое входит в библиотеку API Google Cloud Platform. Для этого нужно:

подключить к проекту в Google Cloud Platform Sheets API

заполнить OAuth consent screen ( пользовательское соглашение )

создать либо OAuth Client ID, либо Service Account

я использую Сервисный Аккаунт, следовательно мне нужно дать сервисному аккаунту доступ к Google Sheet (электронной таблице) с уровнем Редактор, тогда я смогу писать из кода в эту таблицу

получить JSON файл с токеном доступа к сервисному аккаунту и положить его куда-то откуда код сможет его читать

В тексте это выглядит просто, однако в первый раз интерфейс Google Cloud Console выглядит как рубка звездолета. Куда жать не понятно, иные операции нельзя отменить, а некоторые важные данные можно получить только сразу после нажатия на кнопку и никак после (например json файл токена доступа сервисного доступа). Поэтому страаашно.

В первый раз мне пришлось закрыть ЭТО и пойти подышать.

В первый раз мне пришлось закрыть ЭТО и пойти подышать.

Но разобраться можно, попробуйте. А если не получится, то вот Пост только про токены Google Cloud.

Как дать доступ к таблице Сервисному Аккаунту

Просто беру емейл сервисного аккаунта и расшариваю доступ к электронной таблице Google Sheets, как если бы это был емейл гуглоаккаунта любого другого живого человека. И этому доступу нужно выдать права Редактора, чтобы с Сервисным аккаунтом писать в этот Google Sheet. На стороне Google Cloud ничего дополнительно делать не надо.

Уведомлять Сервисный Аккаунт тоже не обязательно — он же робот, вы чего 😉

Лимиты Google Sheets API

Google почти ко всем своим API доступ выдает БЕСПЛАТНО и без премодерации (в тестовом режиме). Однако ограничивает. К некоторым апи ограничения сильные, а к Sheets API вполне приемлемые.

Read requests per minute 300
Read requests per minute per user 60
Read requests per day Unlimited

Write requests per minute 300
Write requests per minute per user 60
Write requests per day Unlimited

Каждый execute() тратит эти лимиты, даже если запрос не успешный. Остатки лимитов нельзя узнать программно, из кода. Только посмотреть в браузере в https://console.cloud.google.com/apis/api/sheets.googleapis.com/quotas?project=<id проекта> .

Зависимости для доступа к Sheets API из Python

Мой req.txt выглядит вот так:

Для Python есть пакеты специально для работы с Google Sheets API. Говорят они даже удобные и это, наверняка, так. Но я работаю не только с Sheets API, поэтому предпочитаю использовать большой и не очень удобный google-api-python-client

build ресурса для доступа к Google Sheets API на Python

В google-api-python-client есть универсальный метод googleapiclient.discovery.build , который создает ресурс для работы с любым API Google и с Sheets API в частности. Но сначала нужно куда то в проекте сложить json файл токена доступа сервисного аккаунта.

build у меня в проекте выглядит вот так:

scopes — это уровень доступа, который хочет наше приложение от Google API. Для задач чтения/записи/форматирования в Google Sheet с Сервисным Аккаунтом https://www.googleapis.com/auth/spreadsheets достаточно.

Такое приложение (с Сервисным Аккаунтом) не будет ничего просить от пользователя через браузер, как было бы с OAuth авторизацией. Удобно.

Как узнать spreadsheet_id Google Sheet

Чтобы писать в электронную таблицу, нужно знать её идентификатор. Также нам может понадобиться (при форматировании уж точно) идентификатор листа в электронной таблице. В браузере это все выглядит просто:

Как читать из Google Sheet с API на Python?

Для чтения у нас есть два метода spreadsheets().values().get() и spreadsheets().values().batchGet() . В аргументы им передается идентификатор электронной таблицы Google Sheet и диапазон для чтения.

Диапазон для чтения — это строка вида «Лист!A1:Z999» . Диапазоны, как видно, могут быть на разных листах электронной таблицы.

batchGet в отличии от get может запросить сразу, за один execute() , несколько диапазонов данных, что экономит квоты. Рекомендую сразу и везде использовать только батчевые методы.

Запрос отправляется (и расходуются квоты) только по методу execute().

В ответ мы получаем json (dict), где все очевидно. В поле values двумерный массив с нужными данными.

Как писать в Google Sheet с API на Python?

Для записи есть 3 метода:

append — пытается писать в заданный диапазон, если ячейки в заданном диапазоне заняты данными (не пусты), то пишет в ближайшую пустую ячейку ниже,

update — пишет в заданный диапазон, если ячейки заняты данными — он эти данные перезапишет новыми,

batchUpdate — действует как update, но может за один запрос записать несколько пачек данных в разные диапазоны и сэкономить квоты.

Данные для всех этих методов передаются в аргументе body. Для append / update структура одинакова:

Т.е. values — это простой двумерный массив. А запись выглядит вот так:

range — диапазон для записи, а valueInputOption : ‘RAW’ — значит данные буду писать в ячейку «как есть», не пытаясь, например, в строке разглядеть дату.

Со структурой body для batchUpdate посложнее, но не сильно:

Нужно ли тут что-то объяснять? Напишите в комментарий, если все таки надо.

Ну а метод даже проще чем у update / append :

Конечно есть, особенно при записи, некоторые тонкости. Особенно когда речь заходит про форматирование — все эти строки которые вдруг становятся датами, когда не надо. Числа которые стали строками. Но что-то и так много текста вышло, поэтому пока закругляюсь.

Полезные ссылки

Документация Google Sheets API. Доки, кстати, очень хорошие. Не все API Google так хорошо задокументированы.

На Хабре есть хорошая статья, жаль мне поздно попалась.

Все что в статье — есть в оформленном виде на GitHub ( темы разбросаны по веткам репозитория, просто переключайтесь ).

Google Sheets API Browser Quickstart Client ID and API key

I am trying to follow the Browser Quickstart for the Google Sheets API. In «Step 1: Turn on the Google Sheets API», the tutorial has buttons which create a new project and create an API key, but I can’t use these because I don’t have permission to create new projects (however, I do have «owner» role for an existing GCP project). The tutorial provides no explanation of how to get a Client ID and API key without the use of the embedded buttons — how can I do this?

1 Answer 1

If you already have a existing project. You can add the Sheet API to it and then retrieve the credentials from said project.

First enter Console Cloud. In there select the project where you need to enable the API calls.

enter image description here

enter image description here

After you have selected your project you need to enable the API for this project, to do so go to the API dashboard. In there click on ENABLE APIS AND SERVICES :

enter image description here

In there look for the Google Sheets API and on founding it click on ENABLE :

After enabing this API you will need to generate the credentials click on Create credentials > OAuth client ID . After that you just need to fill the information and add the corresponding scopes.

After you have added your credentials you can download the JSON for you to use it.

enter image description here

For the API key you can do the same process but instead of OAuth Client ID do Create credentials > API key :

API Key creation

After that you can see the API Key from the same page.

If you need more information on how to enable API’s and other functionalities refer to the official documentation.

Как получить ключ Google API (для YouTube API, Google Sheets API и т.д.)

Для того чтобы пользоваться сервисами Google API (YouTube API, Google Sheets API, Google Docs, Drive и т.д.), с использованием любого языка программирования, необходимо:

  • создать проект в Google Cloud Platform,
  • подключить нужные API (а их у Google много),
  • прописать OAuth consent screen,
  • получить ключи доступа,
  • и провести ещё ряд настроек (безопасность, ограничения доступа),
  • нужно соблюдать правила,
  • укладываться в лимиты (quotas) и контролировать их.

В некоторых случаях нужно пройти модерацию проекта в Google Cloud Platform чтобы нормально работать. При этом Google любит менять как правила, так и интерфейс. Инструкции написанные в прошлом году могут не работать совсем или местами. Как в этом всем разобраться?

Я в своем сериале про работу с YouTube API уже делал два видео (1, 2) о создании проекта в Google Cloud Platform и получении ключей. Но понял что уже пора их дополнить, и более внятно систематизировать в виде отдельной статьи и отдельного видео, что я и делаю ниже.

Примеры использования Google API на практике смотрите в плейлисте, а сегодня чисто интерфейс Google Cloud Console.

Скорее всего со временем что-то в ней устареет, но текст проще править и/или дополнять, чем видео. Кроме того тут главное «воткнуться» в идеологию Google Cloud Platform и тогда все изменения будут восприниматься легче. Поскакали!

Видео версия — все то что в тексте ниже и немного больше

Создание проекта в Google Cloud Platform

Сначала вам нужен обычный аккаунт в Google. Иногда полезно завести отдельный аккаунт Google специально для приложения. Залогинься под этим аккаунтом в браузере и перейди в Google Cloud Platform по ссылке https://console.cloud.google.com/.

Регистрация в Google Cloud Platform

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

Регистрация в Google Cloud Platform

Это кадр из первого видео про создание приложения в Google API.

Создание Проекта в Google Cloud Platform

Затем нужно создать Проект в Google Cloud Console. Название произвольное (без кириллицы), но лучше внятное, чтобы ты потом, через полгода, вспомнить где этот проект может быть используется. Ведь в одном аккаунте может быть до 10 проектов и иногда проекты приходится удалять. Бывает сидишь и думаешь можешь ты удалить этот проект или он где то используется, поэтому удалять нельзя ( хозяйке на заметку — просмотр квот может помочь в этом диком случае ).

Создание Проекта в Google Cloud Platform

Создание OAuth consent screen

Это важнейшая, по мнению Google, часть проекта. Она описывает что будет делать приложение и как работать с пользовательскими данными. Здесь же вы должны подготовить Описание приложения, которое будет показываться пользователям если приложение будет запрашивать у него какие либо разрешения (доступ к его гугл диску или к его комментариям на ютюбе).

User Type

Первое что заполняем — это ограничение пользователей приложения. Если вы делаете Проект для ограниченного круга пользователей аккаунты Google которых объедены в Google Cloud Organization (Google Workspaces), то выбираете Internal. Но в большинстве случаев наш выбор External. Зачем делать этот выбор?

OAuth consent screen User Type

Internal проекты не нужно отправлять на модерацию в Google. Проект полноценно работает для всех пользователей вашей организации. Это удобно, например, когда вы делаете что-то вроде CRM с использованием Google Docs, Google Sheets, Google Drive. Пришел новый сотрудник, админ закинул его в Google Workspaces и он полноценный пользователь вашего приложения. Чтобы выбрать этот пункт нужно чтобы у вас уже была организация в Google Cloud. Иначе этот пункт будет не доступен для выбора.

External проекты могут быть доступны неограниченному кругу пользователей. Не нужно никаких Google Cloud Organization, ваше приложение просто спрашивает у юзера разрешение на изменение его Google Sheets и этого достаточно. А пользователь может, при необходимости, отозвать разрешение у вашего приложения когда сочтет нужным. Однако чтобы Проект так работал его нужно отправить на модерацию в Google, и не факт что проект эту модерацию пройдет. А в режиме теста некоторые функции Проекту могут быть вообще не доступны (например загрузка видео в паблик на YouTube через YouTube API). И круг пользователей ограничен сотней Google аккаунтов, которые ещё и нужно добавлять в проект вручную и невозможно удалить.

Иногда можно делать приложение, а для полноценного его использования просить юзера создать Проект в его Google Cloud Platform и подгрузить в проект ключи. Но это, сами понимаете, доступно не каждому пользователю.

Итак я выбираю здесь External .

Регистрация проекта в Google Cloud Platform

То что вы укажете в этом окне будет видно пользователям приложения во время запроса разрешений. Если вы планируете делать приложение публичным (в том числе отправлять его на модерацию) я бы порекомендовал внимательно отнестись к его заполнению. Я же обычно из тестового режима приложения не вывожу и заполняю эти поля как придется — на работу в тестовом режиме все это не влияет (ну кроме домена в некоторых случаях).

Регистрация проекта в Google Cloud Platform

Scopes Проекта — должны быть минимальными чтобы не просить у пользователя слишком много и не отпугивать. Также слишком много запросов на разрешения могут усложнить прохождение модерации. Для приложения в тесте я здесь не заполняю вообще ничего, а разрешения запрашиваю уже из кода на Python, PHP или C#.

Scopes Проекта

Тестовые пользователи проекта. У приложения в режиме теста есть ограничения по ряду методов в ряде API Google Cloud. Некоторые из них доступны только тем Google Account что добавлены в Test Users.

Тестовые пользователи проекта

Важно! Единожды добавив тестового юзера в список его уже нельзя удалить.

После заполнения OAuth consent screen наступает самый важный момент — создание ключей.

Создание Credentials

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

Окно Credential Google Cloud Platform

Для того чтобы наше приложение могло обращаться к API Google Cloud нужно идентифицировать приложение и создать в коде сущность от имени которой приложение будет взаимодействовать с API Google Cloud. Для этого в окне Credentials нужно создать как минимум 1 идентификатор (ключ, токен) которое затем нужно использовать в вашем коде. В окне Credentials вы видите 3 типа идентификаторов API Keys, OAuth 2.0 Client IDs и Service Accounts. Для разных методов разных API могут быть нужны разные идентификаторы, в некоторых случаях достаточно простого API Key (который может быть вечным), а случаях когда приложение использует пользовательские данные или работает от имени пользователя нужно использовать OAuth 2.0 Client ID и запрашивать у пользователя разрешения.

Давайте проще на конкретных примерах:

  • я хочу получить список опубликованных видео на YouTube по поисковому запросу (метод YouTube Data API search.list) — тогда мне достаточно API Key
  • я хочу удалить видео на канале (videos/delete) — мне нужен OAuth 2.0 Client ID и перед обращением к методу удаления я буду должен запросить разрешения у владельца канала. Запросить доступ используя только API Key я не смогу.
  • я хочу редактировать уже созданную таблицу Google Sheets — я могу использовать OAuth 2.0 Client ID (с запросом разрешений), но проще создать Service Account и тогда пользователь сможет предоставить нужный доступ к конкретной таблице только конкретному сервисному аккаунту.

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

Как создать API Key

Жмем кнопку + CREATE CREDENTIALS, затем выбираем API Key, появляется окно с ключом. Ключ создан и им можно пользоваться. Созданный ключ можно удалить или отредактировать для ограничения доступа по ряду условий (доступ по IP, доступ по приложениями, доступ к конкретным API Google Cloud). Ключ вечный, обновлять его не нужно.

Как создать API Key

Если нажать на REGENERATE KEY, то токен (значение ключа, набор символов) изменится и все приложения которые использовали этот ключ работать перестанут.

Как создать Service Account

Жмем кнопку + CREATE CREDENTIALS, затем выбираем Service Account, появляется окно где обязательно нужно заполнить только два поля:

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

Создание сервисного аккаунта в Google Cloud Console

Для работы с сервисным аккаунтом обычно достаточно знать его емейл. Например для выдачи нашему приложению разрешения редактировать Google Sheet нужно просто расшарить таблицу на емейл сервисного аккаунта.

Пример использования сервисного аккаунта

Пример использования сервисного аккаунта

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

Как создать OAuth 2.0 Client ID

OAuth 2.0 Client ID предоставляет наибольшее количество возможностей, однако и более сложен в обращении на всех этапах от создания, до использования в приложениях. Именно с этим ключом приложение может делать в пользовательском аккаунте почти все:

  • создавать, редактировать и удалять документы (Google Docs, Sheets, видео и комментарии на YouTube)
  • получать статистику по ресурсам (например YouTube каналы) которыми владеет пользователь
  • менять ресурсы (описания, названия)
  • может банить пользователей и менять права доступа для своих ресурсов
  • и много другое в зависимости от API, которых в Google Cloud Platform множество

При условии что приложение запросило разрешение у пользователя и пользователь это разрешение выдал.

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

Чтобы получить OAuth 2.0 Client ID также жмем + CREATE CREDENTIALS, а затем Create OAuth client ID. Здесь важно выбрать верный тип приложения которое будет использовать создаваемый ключ. Если с Android, iOS, Chrome App, UWP все понятно, то что выбрать Web App или Desktop порой не сразу ясно и я поясню в видео на 30:57 , а пример использования Create OAuth client ID на примере YouTube Data API на Python можно посмотреть в этом видео.

Какие ключи выбрать то в итоге для приложения

Все просто! Если ваше приложение только лишь читает общедоступные данные не связанные с личными данными пользователей, то, скорее всего, вашему приложению будет достаточно API Key. Тогда используйте именно его и создавайте ключи под разные задачи. В остальных ситуациях предпочтителен сервисный аккаунт и только если его не хватает методу (а это может быть явно указано в документации к методу) используйте Create OAuth client ID.

Подключение нужных API

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

Подключение API

Подключить API просто идем в раздел Library и добавляем нужное API.

Про квоты

У каждого проекта в Google Cloud Console на каждое API если определенные лимиты, называемые квоты. Когда приложение использует методы API, отправляя запрос эти квоты (points) расходуются. Расходуются они даже если запрос был не успешным. Квоты выдаются на проект, и в каждом аккаунте Google Cloud Console может быть до 10 проектов.

Тут есть прием, незатейливая хитрость, которая позволяет вам увеличить вам квоты попробуйте догадаться как и напишите в комментариях.

Квоты можно посмотреть на Dashboard проекта и в разных местах Google Console — просто наберите в поиске консоли quotas.

google-api-quotas

У каждого API есть свои «тарифы», например Калькулятор квот для YouTube Data API. Перед разработкой стоит посмотреть какие методы сколько квот потребляют, как оптимизировать приложение с этой точки зрения и как отлавливать превышение лимита квот. Особая боль в том что ни в каком из API нет методов для проверки остатков квот, а Google в свою очередь может забанить приложение которое будет долбиться с превышением.

Сериал по работе с Google API

Я давно работаю с разными API Google ( хотя гуру себя далеко не считаю ), некоторое время назад я начал делать видео где рассказываю о своем опыте и экспериментах ( все сугубо имхо, но многое выстрадано ). Уже снято про YouTube API , на подходе ещё серии про Google Sheets API , возможно будет ещё что-то и все это собрано в плейлисте Google API, я стараюсь отвечать на все комментарии к видео, готов помочь или принять конструктивную критику. Так что велкоме!

Добавить комментарий

Ваш адрес email не будет опубликован.