Подключитесь к 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 для вас.
