11 Stimmen

Google Analytics - API-Zugriff ohne Anmeldung

Ich hatte erfolgreich die Google Analytics API konfiguriert und erfolgreiche Daten erhalten.

Ich möchte auf die Analytics API zugreifen, ohne mich bei Gmail anzumelden.

d.h. Ich werde Anmeldeinformationen fest codieren, aber wie mache ich das mit PHP?

Gibt es eine API-Funktion, um diese Aufgabe zu erreichen (für PHP)?

Vielen Dank!

3voto

Matt Punkte 4820

Der Hello Analytics API: PHP Schnellstartanleitung für Service-Konten führt Sie durch die erforderlichen Schritte zur Erstellung und Hinzufügung eines Service-Kontos zu Ihrem bestehenden Google Analytics Konto/Eigenschaft/Ansicht.

Nachdem Sie die PHP-Client-Bibliotheken heruntergeladen und die p12-Datei aus der Entwicklerkonsole heruntergeladen haben, können Sie ein autorisiertes Analytics-Serviceobjekt erstellen:

// Erstellt und gibt das Analytics-Serviceobjekt zurück.

// Laden der Google API PHP Client-Bibliothek.
require_once 'google-api-php-client/src/Google/autoload.php';

// Verwenden Sie die Entwicklerkonsole und ersetzen Sie die Werte durch Ihre
// E-Mail-Adresse des Service-Kontos und den relativen Speicherort Ihrer Schlüsseldatei.
$service_account_email = '';
$key_file_location = '';

// Erstellen und konfigurieren eines neuen Client-Objekts.
$client = new Google_Client();
$client->setApplicationName("HelloAnalytics");
$analytics = new Google_Service_Analytics($client);

// Lesen des generierten client_secrets.p12-Schlüssels.
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_email,
    array(Google_Service_Analytics::ANALYTICS_READONLY),
    $key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}

return $analytics;

Mit dem zurückgegebenen Serviceobjekt können Sie nun Aufrufe bei den Google Analytics APIs machen:

// Ruft die Core Reporting API auf und fragt die Anzahl der Sitzungen ab
// der letzten sieben Tage.
$analytics->data_ga->get(
   'ga:' . $profileId,
   '7daysAgo',
   'today',
   'ga:sessions');

0voto

Eduardo Punkte 22038

Die Google Analytics API ist aus mehreren Gründen nicht geeignet für das, was Sie wollen.

  1. Sicherheit. Wenn der Endbenutzer Ihre Anmeldeinformationen hat, kann er sich in Ihr Google-Konto einloggen und auf alle Ihre Daten zugreifen.
  2. Latenz. Die API ist nicht dafür gedacht, beim Seitenaufruf verwendet zu werden. Wenn Ihre Seitenaufrufe davon abhängen, kann es für Ihre Benutzer lange dauern, bis die Seite geladen ist.
  3. Quote. Die API hat ein begrenztes Kontingent, das schnell aufgebraucht ist, wenn Sie sie jedes Mal abfragen, wenn ein Benutzer Ihre Website betritt.
  4. Design. Letztendlich wurde die API so konzipiert, dass sie von Ihnen selbst offline zur Extrahierung von Daten und nicht in Echtzeit von anderen verwendet wird.

Angesichts dieser Dinge sollten Sie, wenn Sie Ihren Benutzern die Daten anzeigen möchten, ein System erstellen, das die richtigen Daten offline herunterlädt, sie in einer Datenbank speichert und auf der Seite anzeigt. Auf diese Weise können Sie die Daten einmal abfragen und mehrmals anzeigen, ohne Ihre Anmeldeinformationen preiszugeben.

Google hat sogar eine AppEngine-Anwendung veröffentlicht, die genau das tut. Sie fragt Daten ab und speichert sie in einer Datenbank, sodass sie von nicht authentifizierten Benutzern angesehen werden können und mit minimalem Latenz, da sie zur Ansichtszeit einfach aus dem Datenstore abgerufen wird. Es heißt Google Analytics superProxy.

UPDATE 09/02

Bei der Anforderung in Ihrer Anwendung müssen Sie dennoch oAuth abschließen und da Sie wollen, dass es automatisiert wird, möchten Sie den Anmeldebildschirm vermeiden. Es gibt 2 Optionen

  1. Verwenden Sie oAuth für installierte Apps. Schließen Sie manuell den Anmeldebildschirm ab und speichern Sie die Auffrischungstoken. Täglich können Sie das Auffrischungstoken verwenden, um ein Zugriffstoken zu erhalten und Daten ohne manuellen Eingriff abzufragen.
  2. Verwenden Sie Service Accounts. Diese erfordern keine manuelle Genehmigung des Anmeldebildschirms, aber Sie müssen dem Dienstkonto-E-Mail in Ihrem Google Analytics-Konto Zugriff gewähren. Service-Konten verwenden Krypto zur Authentifizierung, daher benötigen Sie möglicherweise ein Kryptomodul für PHP, um dies zu verwenden.

0voto

Terry Wang Punkte 1

Verwenden Sie Service-Konto: https://developers.google.com/api-client-library/php/auth/service-accounts https://developers.google.com/analytics/solutions/articles/hello-analytics-api#authorize_access

Es benötigt die google-api-php-client-Bibliothek, Sie können ein Service-Konto in Ihrer Google Developer Console erstellen, dann fügen Sie die E-Mail dieses Kontos Ihrem Google Analytics-Profil 'Benutzerverwaltung' für das Profil hinzu, auf das Sie zugreifen möchten. Folgen Sie dann dem Code in den obigen Links, sollten Sie in der Lage sein, auf Ihre Google Analytics-Daten zuzugreifen, ohne sich bei Google anzumelden (weil Sie bereits die E-Mail und den p12-Schlüssel des Service-Kontos für die Autorisierung bereitgestellt haben).

0voto

Hallo Kiran,

  1. Service Account
    Mit serverseitiger Autorisierung mit der Google Python Client API können Sie diese Demo verwenden, um Zugriff auf Google Analytics-Daten und Diagramme für jeden Benutzer ohne Anmeldung zu erhalten.

  2. oAuth für Google APP
    Der andere Weg ist die Verwendung von oAuth. In diesem Fall benötigen Sie jedoch ein kostenpflichtiges Google Apps for Work-Konto Google Apps Sie können hier lesen, wie Sie Apps und oAuth kombinieren, um Zugriff ohne Anmeldung zu erhalten.

Ich habe hier den funktionierenden Code für die neue (2016) Google Client PHP API Beta für den anonymen Zugriff mit JSON hinzugefügt - einschließlich eines amCharts.

Zusätzlich kann der Erneuerungsprozess für die JSON-Berechtigungsdateien automatisiert werden - dies ist jedoch nicht in diesem Codebeispiel enthalten. Ein ClientLogin-Token kann 2 Wochen ab dem Ausstellungsdatum gültig sein, aber diese Grenze ist serviceabhängig und kann kürzer sein. Sie können die Lebensdauer in Google_AssertionCredentials.php (Zeile 24) ändern, obwohl dies ein Sicherheitsrisiko darstellt (für Ihr Geld - wenn jemand die Seite automatisch aufruft, erschöpfen Sie das erlaubte duty-free Volumen)

class Google_AssertionCredentials {
  const MAX_TOKEN_LIFETIME_SECS = 360000;

Um das autoload.php korrekt funktionieren zu lassen, müssen Sie die Client-PHP-API-Ressourcen mit composer.phar in htdocs (Apache) oder wwwroot (IIS) installieren und diesen Code im Ordner "vendor" platzieren.

Ich habe den dataLoader nicht verwendet und auskommentiert, da amChart in meiner Umgebung beim Laden hängen bleibt. Daher habe ich den Dataprovider verwendet, der zuverlässig funktioniert.

/*
     "dataLoader": {
        "url": "data.php",
        "format": "json"
     },
     */

    Gimba - Google Analytics - GimbaChartAll

    body, html {
      font-family: Verdana;
      font-size: 10px;
    }
    #chartdiv {
      width: 1100px;
      height: 700px;
      margin-left:auto;
      margin-right:auto;
    }

    var dataJS = <?php echo dataGA(); ?>;
    var chart = AmCharts.makeChart("chartdiv", {
        "type": "serial",
        "theme": "light",
     /*
     "dataLoader": {
        "url": "data.php",
        "format": "json"
     },
     */

     "dataProvider": dataJS  ,
     "categoryField": "country",
     "categoryAxis": {
       "gridColor": "#0000FF",
       "gridAlpha": 0.07,
       "title": "Country"
     },
     "creditsPosition": "top-right",
     "categoryField": "country",
     "categoryAxis": {
         "gridAlpha": 0.07,
         "gridPosition": "start",
         "tickPosition": "start",
         "title": "Country"
     },
     "valueAxes": [ {
         "id": "v1",
         "gridAlpha": 0.1,
         "axisColor": "#0000ff",
         "title": "Users/Sessions"
     }, {
         "id": "v2",
         "gridAlpha": 0,
         "axisColor": "#0000ff",
         "position": "right",
         "title": "Page views"
     } ],
     "graphs": [ {
         "startDuration": 3,
         "type": "column",
         "title": "Sessions",
         "valueField": "sessions",
         "fillColors": "#0000ff" ,
         "lineAlpha": 0,
         "fillAlphas": 0.6
     }, {
         "type": "column",
         "title": "Users",
         "valueField": "users",
         "fillColors": "#0000ff" ,
         "lineAlpha": 0,
         "fillAlphas": 0.2
     }, {
         "type": "line",
         "valueAxis": "v2",
         "title": "Page views",
         "valueField": "pageviews",
         "lineColor": "#0000ff" ,
         "lineThickness": 1,
         "bullet": "round"
     } ],
     "legend": {}
    } );

 'xxxxxxxxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxx.iam.gserviceaccount.com',
      'key'     => file_get_contents(__DIR__ . '/OAuthClientServiceAccount1.json'),
      'profile' => 'xxxxxxxxx'
    );
    // Erstellt und gibt das Analytics-Serviceobjekt zurück.
    // Laden der Google API PHP-Clientbibliothek.
    // Erstellen und Konfigurieren eines neuen Client-Objekts.
    $client = new Google_Client();
    $client->setApplicationName( 'Gimba3' );
    $analytics = new Google_Service_Analytics($client);
    $scopes = array('https://www.googleapis.com/auth/analytics.readonly');
    $client->setScopes($scopes);
    try{
        $client->setAuthConfigFile(__DIR__ . '/OAuthClientServiceAccount1.json');
    }
    catch(Exception $e){
        echo "Schlüssel NICHT OK";
        echo $e->getMessage()."";
    }
    try{
        if( $client->isAccessTokenExpired() ) {
            $client->refreshTokenWithAssertion($client->setAuthConfigFile(__DIR__ . '/OAuthClientServiceAccount2.json'));
        }
    }
    catch(Exception $e){
        echo "Erneuerungsschlüssel NICHT OK";
        echo $e->getMessage()."";
    }
    $projectId = '123464155';
    $results = $analytics->data_ga->get(
                                        'ga:'.$projectId,
                                        '30daysAgo',
                                        'today',
                                        'ga:sessions,ga:users,ga:pageviews',
                                         array(
                                            'dimensions'  => 'ga:country',
                                            'sort'        => '-ga:sessions',
                                            'max-results' => 10
                                         ));
    $rows = $results->getRows();
    //var_dump($rows);
    $dataGA = array();
    foreach( $rows as $row ) {
        $dataGA[] = array(
          'country'   => $row[0],
          'sessions'  => $row[1],
          'users'     => $row[2],
          'pageviews' => $row[3]
        );
    }
    $res = json_encode($dataGA);
    return $res;
}
?>

Mit freundlichen Grüßen Axel Arnold Bangert - Herzogenrath 2016

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X