Авторизация Google Analytics API v3 для предоставления доступа к моим данным - PullRequest
12 голосов
/ 29 марта 2012

Я занимаюсь разработкой приложения, которое позволяет пользователям просматривать мои собственные данные Google Analytics с помощью Google API v3. Все, что я исследовал, указывает на то, что пользователям необходимо войти в свои учетные записи Google и предоставить моему приложению доступ, прежде чем я начну запрашивать API; однако это не то, чего я хочу, мне просто нужно, чтобы мои пользователи видели мои собственные данные Google Analytics. Как можно авторизовать API для доступа к моим данным. У меня есть идентификатор клиента и Client Secret, но OAuth, который реализован в API v3 от Google, запрашивает токен авторизации, который можно получить, только если пользователь войдет в свою учетную запись Google (верно?) Можно ли просто войти в свою учетную запись Google Analytics и показать эту информацию пользователям?

Ответы [ 3 ]

11 голосов
/ 11 апреля 2013

Я полагаю, что вы хотите создать Сервисную учетную запись : https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorization

"Полезно для автоматического / автономного / запланированного доступа к данным Google Analytics для вашегособственной учетной записи. Например, чтобы создать живую информационную панель из собственных данных Google Analytics и поделиться ею с другими пользователями.

Для настройки служебных учетных записей для работы с Google Analytics необходимо выполнить несколько шагов:

  1. Зарегистрируйте проект в консоли API.
  2. В консоли API Google в области доступа к API создайте идентификатор клиента с типом приложения, установленным в учетную запись службы.
  3. Войдите в Google Analytics и перейдите в раздел администратора.
  4. Выберите учетную запись, к которой вы хотите, чтобы приложение имело доступ.
  5. Добавьте адрес электронной почты от КлиентаИдентификатор, созданный в консоли API с шага № 2 как пользователь выбранной учетной записи Google Analytics.
  6. Следуйте инструкциям для учетных записей служб для доступа к Google Analytics.s данные: https://developers.google.com/accounts/docs/OAuth2ServiceAccount"
2 голосов
/ 10 апреля 2012

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

См. Использование токена обновления в документации.

См. Также: Как получить доступ к конкретным данным аккаунта Google Analytics с помощью API?

0 голосов
/ 01 октября 2013

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

<?php
// Service account code from http://stackoverflow.com/questions/18258593/using-a-service-account-getaccesstoken-is-returning-null
// Analytics code from https://code.google.com/p/google-api-php-client/source/browse/trunk/examples/analytics/simple.php?r=474

require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_AnalyticsService.php';

// Set your client id, service account name (AKA "EMAIL ADDRESS"), and the path to your private key.
// For more information about obtaining these keys, visit:
// https://developers.google.com/console/help/#service_accounts
const CLIENT_ID = 'CLIENT ID';
const SERVICE_ACCOUNT_NAME = 'SERVICE ACCOUNT NAME (IS "EMAIL ADDRESS")';
const KEY_FILE = 'KEY FILE';
const SCOPE = 'https://www.googleapis.com/auth/analytics.readonly';

// OPEN GOOGLE ANALYTICS AND GRANT ACCESS TO YOUR PROFILE, THEN PASTE IN YOUR SERVICE_ACCOUNT_NAME

$key = file_get_contents(KEY_FILE);
$auth = new Google_Auth_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array(SCOPE),
    $key
);

$client = new Google_Client();
$client->setScopes(array(SCOPE));
$client->setAssertionCredentials($auth);
$client->getAuth()->refreshTokenWithAssertion();
$accessToken = $client->getAccessToken();
$client->setClientId(CLIENT_ID);
$service = new Google_Service_Analytics($client);

?>
<!DOCTYPE html>
<html>
  <head>
    <title>Google Experiments Dashboard</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" media="screen">
  </head>
  <body class="container">
    <h1>Your experiments</h1>
    <table class="table"><tr><th><th>Experiment<th>Page<th>Started<th>Status
<?php
$progressClasses = array('progress-bar progress-bar-success','progress-bar progress-bar-info','progress-bar progress-bar-warning', 'progress-bar progress-bar-danger');
$profiles = $service->management_profiles->listManagementProfiles("~all", "~all");

foreach ($profiles['items'] as $profile) {
  $experiments = $service->management_experiments->listManagementExperiments($profile['accountId'], $profile['webPropertyId'], $profile['id']);

  foreach ($experiments['items'] as $experiment) {
    echo "<tr>";
    if ($experiment['status'] == 'RUNNING')
      echo '<td><a class="btn btn-xs btn-success"><i class="glyphicon glyphicon-ok"></i></a>';
    else
      echo '<td><a class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-remove"></i></a>';
    $expHref = "https://www.google.com/analytics/web/?pli=1#siteopt-experiment/siteopt-detail/a{$profile['accountId']}w{$experiment['internalWebPropertyId']}p{$experiment['profileId']}/%3F_r.drilldown%3Danalytics.gwoExperimentId%3A{$experiment['id']}/";
    echo "<td><a href='$expHref' target='_blank'>{$experiment['name']}</a>";
    echo "<td>{$experiment['variations'][0]['url']}";
    echo "<td>".date('Y-m-d',strtotime($experiment['startTime']));
    echo "<td>";

    echo '<div class="progress" style="width:400px">';
    foreach ($experiment['variations'] as $i => $variation) {
      echo '<a href="'.$variation['url'].'" target="_blank"><div class="'.$progressClasses[$i].'" role="progressbar" style="width: '.(100*$variation['weight']).'%">'.$variation['name'].'</div></a>';
    }
    echo '</div>';        
  }
}
?>

Код с дополнительной документацией на https://gist.github.com/fulldecent/6728257

...