2012-03-29 6 views
12

Ich entwickle eine App, mit der Nutzer meine eigenen Google Analytics-Daten mit Google API v3 sehen können. Alles, was ich recherchiert habe, scheint darauf hinzuweisen, dass Benutzer sich in ihre Google-Konten einloggen müssen und meiner App den Zugriff gewähren müssen, bevor ich mit der Abfrage der API beginnen kann. Das ist jedoch nicht das, was ich möchte. Ich brauche nur meine Nutzer, um meine eigenen Analytics-Daten zu sehen. Wie kann die API autorisiert werden, auf meine Daten zuzugreifen? Ich habe die Client ID und den Client Secret, aber das OAuth, das von Googles API v3 implementiert wird, fragt nach einem Autorisierungs-Token, das nur erhalten werden kann, indem der Benutzer sich in seinem Google-Konto anmeldet (ist das richtig?) Ist da eine Möglichkeit, sich einfach in mein eigenes Google Analytics-Konto einzuloggen und diese Informationen den Nutzern anzuzeigen?Google Analytics API v3-Autorisierung für den Zugriff auf meine Daten

+3

ich habe genau die gleiche ques bekam ... Hast du eine Antwort gefunden? – lpdahito

+0

Haben Sie eine Antwort darauf gefunden? –

Antwort

2

Sie können einen refresh token für den Offline-Zugriff verwenden. Sobald Sie die refresh token erhalten haben, können Sie sie in einer Datei oder Datenbank speichern und damit auf die Daten ohne Autorisierungsumleitung zugreifen.

Siehe Using a Refresh Token in der Dokumentation.

Siehe auch: How can we access specific Google Analytics account data using API?

+0

Ich denke für eine robustere Lösung sollten Sie mit der Service-Account-Antwort gehen – mattl

+0

@mattl Ich glaube nicht, dass das ein Grund ist, abzustimmen. Die Antwort ist nicht falsch, es ist nur eine der Optionen, die Google anbietet. –

+0

Du hast Recht Es tut mir leid. Ich kann es jetzt nicht ändern, da es über 20 Stunden her ist. Könnte jemand anderes noch einmal upvoten? – mattl

10

Ich glaube, was Sie tun möchten, ist die Einrichtung eines Service Account: https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorization

„Nützlich für automatisierte/offline/Planmäßig Zugriff auf Google Analytics-Daten für ein eigenes Konto erstellen, um beispielsweise ein Dashboard Ihrer eigenen Google Analytics-Daten zu erstellen und mit anderen Nutzern zu teilen.

Es gibt ein paar Schritte, die Sie für fo benötigen Konfigurieren von Dienstkonten für die Zusammenarbeit mit Google Analytics:

  1. Registrieren Sie ein Projekt in der APIs-Konsole.
  2. Erstellen Sie in der Google APIs-Konsole im Bereich API-Zugriff eine Client-ID mit dem Anwendungstyp, der auf Dienstkonto festgelegt ist.
  3. Melden Sie sich bei Google Analytics an und navigieren Sie zum Abschnitt "Admin".
  4. Wählen Sie das Konto aus, für das die Anwendung auf zugreifen soll.
  5. Fügen Sie die E-Mail-Adresse aus der in den APIs Konsole von Schritt 2 erstellten Client-ID als Benutzer des ausgewählten Google Analytics-Kontos hinzu.
  6. Folgen Sie den Anweisungen für die Dienstkonten Google Analytics-Daten zuzugreifen: https://developers.google.com/accounts/docs/OAuth2ServiceAccount "
0

Hier ist eine vollständige Google Analytics Beispielimplementierung mit Dienstkonto einschließlich Setup-Notizen Berichterstattung schrieb sie Unmittelbar nach der Frage lesen, ich. das gleiche Problem hatte.

<?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>';   
    } 
} 
?> 

Code mit mehr Dokumentation bei https://gist.github.com/fulldecent/6728257

+0

Dieser Code funktioniert für mich ... Klassennamen haben sich seit Google_AssertionCredentials => Google_Auth_AssertionCredentials und Google_AnalyticsService => Google_Service_Analytics geändert – Graben

+0

Vielen Dank, Änderungen vorgenommen –