Поиск по сайту:

Подключитесь к Google API с помощью Powershell


Мы собираемся подключиться к Google API с помощью OAuth2.0 и командлета Powershell Invoke-RestMethod. Прежде чем мы сможем начать написание сценариев в Powershell, нам сначала нужно получить ClientId, ClientSecret, AuthCode, а также Access и Refresh токены. У меня ушло полдня, чтобы разобраться, как подключиться и где что взять, поэтому я надеюсь, что вы, ребята (и девушки), сможете начать и работать в течение 10 минут.

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

Перейдите в консоль разработчиков Google и создайте новый проект, нажав на верхнюю панель на API Project, а затем на + для создания нового проекта. Дайте вашему проекту имя и нажмите создать. Когда закончите, снова нажмите на API Project, нажмите на все и выберите только что созданный проект.

Вы увидите пустую панель управления, нам нужно выбрать, с каким API мы хотим взаимодействовать. Я хочу получить данные аналитики в реальном времени, поэтому выбрал API аналитики. Нажмите 'Включить', после чего вы будете перенаправлены обратно на панель управления.

Как указано на панели управления, нажмите на Создать учетные данные и введите следующее:

  • Какой API вы используете? > Тот, который вы выбрали ранее
  • Откуда вы будете вызывать API? > Веб-браузер (Javascript)
  • Какие данные вы собираетесь получить? > Данные пользователя
  • Авторизованные URIs перенаправления > http://localhost/oauth2callback ! Важно
  • Заполните имя для вашего клиентского ID OAuth 2.0, не важно какое.
  • Создайте экран согласия OAuth 2.0 и нажмите 'Готово'. Мы получим учетные данные с страницы учетных данных.

Получение кода авторизации

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

Сначала нам нужен ClientId, поэтому перейдите на страницу учетных данных и скопируйте clientId. Он выглядит как 864312357012-ftkcasd2f23123plh0tfivvsvasd32123k6b.apps.googleusercontent.com, вставьте его в следующий URL и откройте в вашем браузере:

Replace <CLIENT_ID_HERE> with your client id
https://accounts.google.com/o/oauth2/auth?redirect_uri=<CLIENT_ID_HERE>&scope=https://www.googleapis.com/auth/analytics.readonly&approval_prompt=force&access_type=offline

In the comments below, Phani mentioned that the above url is wrong and should be:
https://accounts.google.com/o/oauth2/auth?client_id=<replacemewithclientid>&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code&redirect_uri=<replacemewithredirecturi>&access_type=offline&approval_prompt=force

I have no time to test it, but if you get an error with the original URL, then check the one mentioned by Phani.

Убедитесь, что вы используете тот же URL-адрес перенаправления, который мы указали, когда создавали учетные данные. http://localhost/oauth2callback

После аутентификации вы будете перенаправлены на http://localhost/oauth2callback?code=4/QhUXhB*********_***********u8jKZkjhsd2#. Скопируйте код без # в конце и сохраните его где-нибудь, он нам понадобится позже.
Этот код действителен только в течение одного часа, и если запрос на получение токена доступа позже по какой-то причине не удастся, вам нужно будет получить новый код аутентификации. Так что имейте это в виду.

Получение токенов доступа и обновления

Для обмена кода авторизации на токены мы будем использовать Powershell для вызова https://www.googleapis.com/oauth2/v4/token. Заполните код авторизации, ClientId, Client Secret и redirect Uri из Google Developer Console и выполните скрипт. Он сохранит два токена в текстовых файлах, чтобы вы могли использовать их позже.

$requestUri = "https://www.googleapis.com/oauth2/v4/token"

$body = @{
	code=<authcode>;
	client_id=<clientId>;
	client_secret=<clientSecret>;
	redirect_uri=<redirectUrl>;
	grant_type="authorization_code"; # Fixed value
};

$tokens = Invoke-RestMethod -Uri $requestUri -Method POST -Body $body;

Store refreshToken
Set-Content $PSScriptRoot"\refreshToken.txt" $tokens.refresh_token

Store accessToken
Set-Content $PSScriptRoot"\accessToken.txt" $tokens.access_token

Обновление токена доступа

Токен доступа действителен только в течение одного часа, поэтому вам нужно получить новый с помощью токена обновления. Токен обновления от Google не истекает, поэтому храните его в безопасном месте. Используйте вызов ниже, чтобы получить новый токен доступа:

$refreshTokenParams = @{
	client_id=$clientId;
  	client_secret=$clientSecret;
	refresh_token=$refreshToken;
	grant_type="refresh_token"; # Fixed value
}

$tokens = Invoke-RestMethod -Uri $requestUri -Method POST -Body $refreshTokenParams

Получение данных из Google API

Итак, теперь у нас есть токены, с помощью которых мы можем получать данные от Google. Для начала посмотрите на https://developers.google.com/oauthplayground/ и https://developers.google.com/apis-explorer/

Чтобы привести пример, вот как получить текущих (в реальном времени) пользователей из Analytics:

Request URL for Analytics Realtime and requesting the activeUsers
$viewId = 12345678 (Get it from the analytics admin page > view settings)
$requestUri = "https://www.googleapis.com/analytics/v3/data/realtime?ids=ga:$viewId&metrics=rt:activeUsers"

Invoke-RestMethod -Headers @{Authorization = "Bearer $accessToken"} -Uri $requestUri -Method GET -ContentType 'application/json'

Обновление: Проверьте этот Google Api Explorer: https://ga-dev-tools.appspot.com/query-explorer/. Он генерирует URI запроса API для вас.