Я пытаюсь заставить серверное приложение регулярно извлекать данные Google Analytics из моей собственной учетной записи GA. Обратите внимание, что это личное приложение на стороне сервера, использующее мои собственные данные, т. Е. Для этого приложения нет конечного пользователя.
Таким образом, я зарегистрировал свое приложение в консоли API Google в качестве приложения-службы , которое предоставило мне идентификатор клиента и закрытый ключ . Насколько я понимаю, приложения-службы не используют URL-адрес приложения и перенаправления, поскольку в этом потоке аутентификации между серверами нет конечного пользователя. Действительно, консоль Google API не предоставила мне никаких секретных данных и не запрашивала у меня URL-адрес переадресации.
К сожалению, я не могу понять, как аутентифицировать свое приложение-приложение в API-интерфейсе PHP для PHP . Существует обширная документация по аутентификации веб-приложений с конечным пользователем.
Документация Google предполагает, что можно аутентифицировать сервер-сервер, подписывая запрос JWT с помощью закрытого ключа . Я просто не могу понять, как это сделать в API-интерфейсе PHP (хотя я просматривал источник и, безусловно, есть скрипт, который подписывает запрос с помощью закрытого ключа.)
Я что-то упустил? Как выполнить проверку подлинности для приложения-службы с помощью моего личного ключа и API-интерфейса Google PHP?
Отредактировано для ясности
API Google Analytics V3 теперь поддерживает токены OAuth2, возвращенные запросом JWT с подпиской .p12. То есть теперь мы можем использовать учетные записи API API / службы .
В настоящее время вытягивает 4 года изо дня в день метрики, только для ада.
Ниже приведен краткий «n» грязный шаг за шагом:
Перейдите в консоль Google API и создайте новое приложение.
На вкладке « Службы » переверните переключатель Google Analytics
На вкладке « Доступ к API » нажмите « Создать идентификатор клиента OAuth2.0».
введите свое имя, загрузите логотип и нажмите « Далее».
выберите опцию « Учетная запись службы» и нажмите « Создать идентификатор клиента»
скачать секретный ключ
Теперь вы снова на странице доступа к API . Вы увидите раздел « Учетная запись службы» с идентификатором клиента и адресом электронной почты
Скопируйте адрес электронной почты (что-то вроде ####@developer.gserviceaccount.com )
Посетите свой администратор GA и добавьте это письмо как пользователь в свои свойства
Это необходимо; в противном случае вы получите критические ошибки.
Получите последний API-интерфейс API Google PHP через Github
git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
Rock 'n' roll (спасибо всем за советы по обновленным именам классов):
// api dependencies require_once(PATH_TO_API . 'Google/Client.php'); require_once(PATH_TO_API . 'Google/Service/Analytics.php'); // create client object and set app name $client = new Google_Client(); $client->setApplicationName(APP_NAME); // name of your app // set assertion credentials $client->setAssertionCredentials( new Google_Auth_AssertionCredentials( APP_EMAIL, // email you added to GA array('https://www.googleapis.com/auth/analytics.readonly'), file_get_contents(PATH_TO_PRIVATE_KEY_FILE) // keyfile you downloaded )); // other settings $client->setClientId(CLIENT_ID); // from API console $client->setAccessType('offline_access'); // this may be unnecessary? // create service and get data $service = new Google_Service_Analytics($client); $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
оригинальное обходное решение ниже
Похоже, что, несмотря на неоднозначную документацию, большинство API Google еще не поддерживают учетные записи служб , включая Google Analytics. Они не могут переваривать токены OAuth2, возвращенные запросом JWT с подпиской .p12. Итак, на данный момент вы не можете использовать API Google Analytics V3 с учетной записью службы .
Временное решение:
В консоли Google API создайте клиентское приложение.
Выполните действия,
client_secret
примерах API-интерфейсов Google PHP, чтобы создатьclient_auth_url
используяclient_id
,client_secret
иredirect_uri
Войдите в Google, используя cURL. (Обязательно используйте файл cookie!)
Откройте
client_auth_url
в cURL и заполните форму. Убедитесь, что вы установилиcurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
иcurl_setopt($ch, CURLOPT_HEADER, 1);
посколькуauthorization_code
будет в заголовкеLocation:
ответ.Используя
client_id
,client_secret
,redirect_uri
и код активации с шага 4, отправьте запрос на маркер OAuth2 для Google . Убедитесь, что в почтовых полях включеноgrant_type = "authorization_code"
.Ура, у вас теперь есть
refresh_token
который никогда не истекает, и рабочийaccess_token
! Отправьте запрос на маркер OAuth2 Google с вашимиclient_id
,client_secret
,redirect_uri
иrefresh_token
когдаaccess_token
срок вашегоaccess_token
и вы получите новый.
Клиент API API Google теперь поддерживает учетные записи служб на соединительной линии.
Реализация еще не выпущена, поэтому вам нужно будет проверить последнюю версию клиента PHP.
Я подготовил пример приложения, демонстрирующий, как вы можете использовать учетные записи службы, чтобы попасть в API Google Prediction. Чтобы просмотреть пример, загляните в примеры / предсказание / serviceAccount.php или посетите http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount .php
Если вы используете API-интерфейс клиента PHP Google, перейдите в Консоль API Google и нажмите « API Access
слева.
Затем Create a Client ID
. Это даст вам secret
и именно там вы установите redirect URL
. Он не даст вам URL-адреса переадресации – это URL-адрес, по которому приложение отправляет пользователя обратно после аутентификации.
Существуют другие методы проверки подлинности, на которые вы можете посмотреть.
вы можете использовать очень полезную библиотеку php GAPI (API-интерфейс API Google Analytics API) для доступа к Google Analytics без OAuth. Он прост в использовании.