Core Reporting API – Entwicklerleitfaden

In diesem Dokument wird erläutert, wie Sie mit der Core Reporting API auf Google Analytics-Daten zugreifen können.

Einführung

Die Core Reporting API bietet Zugriff auf die tabellarischen Daten der Standardberichte und benutzerdefinierten Berichte von Google Analytics. Für den Zugriff auf Daten erstellen Sie eine Abfrage, die Folgendes enthält: die Ansicht (Profil), das Start- und Enddatum sowie die Dimensionen und Messwerte, aus denen sich die Spaltenüberschriften in der Tabelle zusammensetzen. Diese Abfrage wird an die Core Reporting API gesendet und die Core Reporting API gibt alle Daten in Form einer Tabelle zurück.

Wenn Sie mit der API noch nicht vertraut sind, lesen Sie die Übersicht über die Core Reporting API. Sie enthält eine Einführung in die Core Reporting API und die darin enthaltenen Daten.

Vorbereitung

In diesem Leitfaden wird gezeigt, wie Sie mit den Programmiersprachen Java, Python, PHP und JavaScript auf die Google Analytics API zugreifen.

  • Eine vollständige Liste der Programmiersprachen-spezifischen Clientbibliotheken, die mit der API funktionieren, finden Sie auf der Seite Clientbibliotheken.
  • Lies das Referenzhandbuch, um ohne Clientbibliothek auf die API zuzugreifen.

Jede Clientbibliothek stellt ein einzelnes Analysedienstobjekt bereit, um auf alle Daten der Core Reporting API zuzugreifen. Zum Erstellen des Dienstobjekts müssen Sie in der Regel die folgenden Schritte ausführen:

  1. Registrieren Sie Ihre Anwendung in der Google API Console.
  2. Zugriff auf Google Analytics-Daten autorisieren
  3. Erstellen Sie ein Analytics-Dienstobjekt.

Wenn Sie diese Schritte nicht ausgeführt haben, lesen Sie die Anleitung zur Hello Google Analytics API. In dieser Anleitung werden die ersten Schritte zum Erstellen einer Google Analytics API-Anwendung beschrieben. Wenn Sie fertig sind, können Sie diesen Leitfaden verwenden, um reale Aufgaben auszuführen.

Das folgende Code-Snippet enthält eine Variable zum Speichern eines autorisierten Dienstobjekts.

Java

Analytics analytics = // Read Hello Analytics Tutorial for details.

Python

analytics = # Read Hello Analytics Tutorial for details.

PHP

$client = // Read Hello Analytics Tutorial for details.

// Return results as objects.
$client->setUseObjects(true);

$analytics = new apiAnalyticsService($client);

Die PHP-Bibliothek gibt alle API-Ergebnisse als assoziatives Array zurück. Wenn Sie stattdessen echte Objekte zurückgeben möchten, können Sie die Clientmethode useObject aufrufen, wie im Beispiel oben gezeigt.

JavaScript

<script src="https://apis.google.com/js/client.js?onload=loadLib"</script>
<script>
function loadLib() {
  // Handle all the authorization work.
  // Read Hello Analytics Tutorial for details.
  gapi.client.load('analytics', 'v3', makeApiCall);
}
</script>

Mit dem ersten Skript-Tag wird die Google API-JavaScript-Bibliothek geladen. Nach dem Laden wird loadLib ausgeführt, um die Analytics-Dienstklasse zu laden. Anschließend sollte das Objekt gapi.client.analytics im DOM vorhanden sein und zum Abfragen der Core Reporting API verwendet werden.

Nachdem Sie ein Analysedienstobjekt erstellt haben, können Sie Anfragen an die Core Reporting API senden.

Hinweis: Mit dem Analytics-Dienstobjekt kann auch auf die Management API zugegriffen werden.

Übersicht

Bei einer Anwendung, die die Core Reporting API verwendet, sind in der Regel zwei Schritte erforderlich:

  • Core Reporting API abfragen
  • Mit den API-Ergebnissen arbeiten

Sehen wir uns beide Schritte an.

Core Reporting API abfragen

Core Reporting API-Abfrage erstellen

Das Analysedienstobjekt enthält eine Methode zum Erstellen einer Core Reporting API-Abfrage.

Jede Core Reporting API-Abfrage enthält eine Reihe von Parametern, die angeben, welche Daten zurückgegeben werden sollen.

Einer der wichtigsten Abfrageparameter ist der Parameter ids oder die Tabellen-ID. Dieser Parameter gibt an, aus welcher Google Analytics-Datenansicht (Profil) Daten abgerufen werden sollen. Der Wert hat das Format ga:xxx, wobei xxx die ID der Datenansicht (Profil) ist.

Java

Get apiQuery = analytics.data().ga()
    .get(tableId,                  // Table Id.
        "2012-01-01",              // Start date.
        "2012-01-15",              // End date.
        "ga:sessions")               // Metrics.
    .setDimensions("ga:source,ga:keyword")
    .setSort("-ga:sessions,ga:source")
    .setFilters("ga:medium==organic")
    .setMaxResults(25);

Python

api_query = service.data().ga().get(
    ids=TABLE_ID,
    start_date='2012-01-01',
    end_date='2012-01-15',
    metrics='ga:sessions',
    dimensions='ga:source,ga:keyword',
    sort='-ga:sessions,ga:source',
    filters='ga:medium==organic',
    max_results='25')

PHP

private function queryCoreReportingApi() {
  $optParams = array(
      'dimensions' => 'ga:source,ga:keyword',
      'sort' => '-ga:sessions,ga:source',
      'filters' => 'ga:medium==organic',
      'max-results' => '25');

  return $service->data_ga->get(
      TABLE_ID,
      '2010-01-01',
      '2010-01-15',
      'ga:sessions',
      $optParams);
}

In dieser Bibliothek erstellt die Methode get nicht nur eine Core Reporting API-Abfrage, sondern führt auch die Anfrage an die API aus.

JavaScript

function makeApiCall() {
  var apiQuery = gapi.client.analytics.data.ga.get({
    'ids': TABLE_ID,
    'start-date': '2010-01-01',
    'end-date': '2010-01-15',
    'metrics': 'ga:sessions',
    'dimensions': 'ga:source,ga:keyword',
    'sort': '-ga:sessions,ga:source',
    'filters': 'ga:medium==organic',
    'max-results': 25
  });
  // ...
}

In diesem Beispiel wird die Funktion makeApiCall aufgerufen, sobald die JavaScript-Clientbibliothek geladen wurde. In diesem Fall erstellt die Funktion eine neue Google Analytics API-Abfrage und speichert das Objekt in der Variablen apiQuery.

Eine vollständige Liste aller Suchparameter und ihrer Funktionen finden Sie im Core Reporting API-Referenzhandbuch. Mit den Dimensions- und Messwertparametern können Sie außerdem festlegen, welche Daten aus Google Analytics abgerufen werden sollen. Eine vollständige Liste finden Sie auf der Referenzseite Dimensionen und Messwerte.

Core Reporting API-Datenanfrage senden

Nachdem Sie eine Abfrage definiert haben, rufen Sie die execute-Methode auf, um die Abfrage an Google Analytics-Server zu senden.

Java

try {
  apiQuery.execute();
  // Success. Do something cool!

} catch (GoogleJsonResponseException e) {
  // Catch API specific errors.
  handleApiError(e);

} catch (IOException e) {
  // Catch general parsing network errors.
  e.printStackTrace();
}

Wenn Sie stattdessen auf die API-Rohantwort zugreifen möchten, verwenden Sie die Methode executeUnparsed():

HttpResponse response = apiQuery.executeUnparsed();

Python

try:
  results = get_api_query(service).execute()
  print_results(results)

except TypeError, error:
  # Handle errors in constructing a query.
  print ('There was an error in constructing your query : %s' % error)

except HttpError, error:
  # Handle API service errors.
  print ('There was an API error : %s : %s' %
         (error.resp.status, error._get_reason()))

PHP

  try {
    $results = queryCoreReportingApi();
    // Success. Do something cool!

  } catch (apiServiceException $e) {
    // Handle API service exceptions.
    $error = $e->getMessage();
  }

JavaScript

function makeApiCall() {
  // ...

  apiQuery.execute(handleCoreReportingResults);
}

function handleCoreReportingResults(results) {
  if (!results.error) {
    // Success. Do something cool!
  } else {
    alert('There was an error: ' + results.message);
  }
}

Dieses Beispiel basiert auf dem vorherigen Schritt, in dem eine Core Reporting API-Abfrage erstellt wurde. In diesem Schritt wird die Abfrage ausgeführt. Der Parameter der Methode execute ist ein Verweis auf eine Callback-Funktion, die ausgeführt wird, sobald Daten von der API zurückgegeben werden.

Sobald die API Ergebnisse zurückgibt, wird die Callback-Funktion ausgeführt und an die API übergeben. Wenn ein Fehler auftritt, enthalten die Ergebnisse das Attribut error.

In diesem Beispiel wird geprüft, ob error existiert oder ob die API erfolgreich zurückgegeben wurde.

Wenn die Abfrage erfolgreich war, gibt die API die angeforderten Daten zurück. Falls Fehler auftreten, gibt die API einen bestimmten Statuscode und eine Meldung zurück, in der der Fehler beschrieben wird. Alle Anwendungen sollten Fehler ordnungsgemäß erfassen und beheben.

Mit den API-Ergebnissen arbeiten

Wenn die Abfrage der Core Reporting API erfolgreich war, gibt die API die Analytics-Berichtsdaten sowie andere zugehörige Informationen zurück.

Analytics-Berichtsdaten

Die von der API zurückgegebenen Hauptdaten können Sie sich als Tabelle mit zwei Haupttypen von Daten vorstellen:

  • Die Überschrift, die die Arten von Werten in jeder Spalte beschreibt
  • Die Datenzeilen in der Tabelle

Daten der Spaltenüberschrift

Jede API-Antwort enthält eine Spaltenüberschrift, die die Headerinformationen der Tabelle darstellt. Das Feld ist eine Liste (oder ein Array) von Objekten, wobei jedes Objekt den Datentyp in der Spalte beschreibt. Die Spaltenreihenfolge besteht aus Dimensionsspalten, gefolgt von Messwertspalten, in derselben Reihenfolge wie in der ursprünglichen Abfrage angegeben.

Java

private void printColumnHeaders(GaData gaData) {
 System.out.println("Column Headers:");

 for (GaDataColumnHeaders header : gaData.getColumnHeaders()) {
   System.out.println("Column Name: " + header.getName());
   System.out.println("Column Type: " + header.getColumnType());
   System.out.println("Column Data Type: " + header.getDataType());
 }
}

Python

def print_column_headers():
  headers = results.get('columnHeaders')

  for header in headers:
    # Print Dimension or Metric name.
    print 'Column name = %s' % header.get('name'))
    print 'Column Type = %s' % header.get('columnType')
    print 'Column Data Type = %s' % header.get('dataType')

PHP

private function printColumnHeaders(&results) {
  $html = '';
  $headers = $results->getColumnHeaders();

  foreach ($headers as $header) {
    $html .= <<<HTML
Column Name = {$header->getName()}
Column Type = {$header->getColumnType()}
Column Data Type = {$header->getDataType()}
HTML;

  print $html;
}

JavaScript

function printColumnHeaders(results) {
  var output = [];

  for (var i = 0, header; header = results.columnHeaders[i]; ++i) {
    output.push(
        'Name        = ', header.name, '\n',
        'Column Type = ', header.columnType, '\n',
        'Data Type   = ', header.dataType, '\n'
    );
  }

  alert(output.join(''));
}

Zeilendaten

Die von der API zurückgegebenen Hauptdaten werden als zweidimensionale List von Strings zurückgegeben. Die äußere Liste enthält alle Datenzeilen. Jede innere Liste stellt eine einzelne Zeile dar, wobei die Reihenfolge der Zellen in einer Zeile mit den Feldern im oben beschriebenen Spaltenkopfobjekt übereinstimmt.

Da Daten in jeder Zelle als String zurückgegeben werden, ist das Feld DataType in jedem Spaltenheaderobjekt besonders hilfreich, da es zum Parsen von Stringwerten in einen geeigneten Typ verwendet werden kann. In der Metadaten-API-Antwort finden Sie alle möglichen Datentypen.

In den folgenden Beispielen werden sowohl die Kopfzeilen als auch die Zeilen der Tabelle gedruckt.

Java

private void printDataTable(GaData gaData) {
 if (gaData.getTotalResults() > 0) {
   System.out.println("Data Table:");

   // Print the column names.
   for (GaDataColumnHeaders header : gaData.getColumnHeaders()) {
     System.out.format("%-32s", header.getName() + '(' + header.getDataType() + ')');
   }
   System.out.println();

   // Print the rows of data.
   for (List<String> rowValues : gaData.getRows()) {
     for (String value : rowValues) {
       System.out.format("%-32s", value);
     }
     System.out.println();
   }
 } else {
   System.out.println("No Results Found");
 }

Python

def print_data_table(results):
  # Print headers.
  output = []
  for header in results.get('columnHeaders'):
    output.append('%30s' % header.get('name'))
  print ''.join(output)

  # Print rows.
  if results.get('rows', []):
    for row in results.get('rows'):
      output = []
      for cell in row:
        output.append('%30s' % cell)
      print ''.join(output)
  else:
    print 'No Results Found'

PHP

private function printDataTable(&$results) {
  if (count($results->getRows()) > 0) {
    $table .= '<table>';

    // Print headers.
    $table .= '<tr>';

    foreach ($results->getColumnHeaders() as $header) {
      $table .= '<th>' . $header->name . '</th>';
    }
    $table .= '</tr>';

    // Print table rows.
    foreach ($results->getRows() as $row) {
      $table .= '<tr>';
        foreach ($row as $cell) {
          $table .= '<td>'
                 . htmlspecialchars($cell, ENT_NOQUOTES)
                 . '</td>';
        }
      $table .= '</tr>';
    }
    $table .= '</table>';

  } else {
    $table .= '<p>No Results Found.</p>';
  }
  print $table;
}

JavaScript

function printRows(results) {
  output = [];

  if (results.rows && results.rows.length) {
    var table = ['<table>'];

    // Put headers in table.
    table.push('<tr>');
    for (var i = 0, header; header = results.columnHeaders[i]; ++i) {
      table.push('<th>', header.name, '</th>');
    }
    table.push('</tr>');

    // Put cells in table.
    for (var i = 0, row; row = results.rows[i]; ++i) {
      table.push('<tr><td>', row.join('</td><td>'), '</td></tr>');
    }
    table.push('</table>');

    output.push(table.join(''));
  } else {
    output.push('<p>No Results Found</p>');
  }

  alert(output.join(''));
}

Berichtsinformationen

Neben den Daten der Haupttabelle enthalten die von der API zurückgegebenen Daten einige allgemeine Informationen zur Antwort. Sie können ihn dann ausdrucken:

Java

private void printResponseInfo(GaData gaData) {
  System.out.println("Contains Sampled Data: " + gaData.getContainsSampledData());
  System.out.println("Kind: " + gaData.getKind());
  System.out.println("ID:" + gaData.getId());
  System.out.println("Self link: " + gaData.getSelfLink());
}

Python

def print_response_info(results):
  print 'Contains Sampled Data = %s' % results.get('containsSampledData')
  print 'Kind                  = %s' % results.get('kind')
  print 'ID                    = %s' % results.get('id')
  print 'Self Link             = %s' % results.get('selfLink')

PHP

private function printReportInfo(&$results) {
  $html = <<<HTML
  <pre>
Contains Sampled Data = {$results->getContainsSampledData()}
Kind                  = {$results->getKind()}
ID                    = {$results->getId()}
Self Link             = {$results->getSelfLink()}
</pre>
HTML;

  print $html;
}

JavaScript

function printReportInfo(results) {
  var output = [];

  output.push(
      'Contains Sampled Data  = ', results.containsSampledData, '\n',
      'Kind                   = ', results.kind, '\n',
      'ID                     = ', results.id, '\n',
      'Self Link              = ', results.selfLink, '\n');

  alert(output.join(''));
}

Das Feld containsSampledData ist wichtig, da es beschreibt, ob die API-Antwort auf Stichprobe gesetzt wurde. Die Stichprobenerhebung kann sich auf die Ergebnisse der Daten auswirken und die Ursache sein, warum die von der API zurückgegebenen Werte nicht mit der Weboberfläche übereinstimmen. Weitere Informationen finden Sie im Konzeptleitfaden unter Stichproben.

Informationen (Profil) ansehen

Jede Antwort enthält eine Gruppe von Parametern, die das Konto, die Web-Property und die Datenansicht (Profil) angeben, zu denen diese Daten gehören.

Java

private void printProfileInfo(GaData gaData) {
  GaDataProfileInfo profileInfo = gaData.getProfileInfo();

  System.out.println("Account ID: " + profileInfo.getAccountId());
  System.out.println("Web Property ID: " + profileInfo.getWebPropertyId());
  System.out.println("Internal Web Property ID: " + profileInfo.getInternalWebPropertyId());
  System.out.println("View (Profile) ID: " + profileInfo.getProfileId());
  System.out.println("View (Profile) Name: " + profileInfo.getProfileName());
  System.out.println("Table ID: " + profileInfo.getTableId());
}

Python

def print_profile_info(result):

  info = results.get('profileInfo')
  print 'Account Id          = %s' % info.get('accountId')
  print 'Web Property Id     = %s' % info.get('webPropertyId')
  print 'Web Property Id     = %s' % info.get('internalWebPropertyId')
  print 'View (Profile) Id   = %s' % info.get('profileId')
  print 'Table Id            = %s' % info.get('tableId')
  print 'View (Profile) Name = %s' % info.get('profileName')

PHP

private function printProfileInformation(&$results) {
  $profileInfo = $results->getProfileInfo();

  $html = <<<HTML
<pre>
Account ID               = {$profileInfo->getAccountId()}
Web Property ID          = {$profileInfo->getWebPropertyId()}
Internal Web Property ID = {$profileInfo->getInternalWebPropertyId()}
Profile ID               = {$profileInfo->getProfileId()}
Table ID                 = {$profileInfo->getTableId()}
Profile Name             = {$profileInfo->getProfileName()}
</pre>
HTML;

  print $html;
}

JavaScript

function printProfileInfo(results) {
  var output = [];

  var info = results.profileInfo;
  output.push(

      'Account Id          = ', info.accountId, '\n',
      'Web Property Id     = ', info.webPropertyId, '\n',
      'View (Profile) Id   = ', info.profileId, '\n',
      'Table Id            = ', info.tableId, '\n',
      'View (Profile) Name = ', info.profileName);

  alert(output.join(''));
}

Jede dieser IDs entspricht verschiedenen Entitäten in der Management API-Hierarchie. Mit diesen IDs können Sie Management API-Abfragen erstellen, um zusätzliche Konfigurationsinformationen zur Ansicht (Profil) zu erhalten. Beispiel: Sie können die Sammlung von Zielvorhaben aus der Management API abfragen, um zu sehen, welche Zielvorhaben zusammen mit den konfigurierten Zielvorhabennamen aktiv sind.

Abfrageinformationen

Jede Core Reporting API-Antwort enthält ein Objekt, das alle Abfrageparameterwerte enthält, die zum Erstellen der Antwort verwendet wurden.

Java

private void printQueryInfo(GaData gaData) {
  GaDataQuery query = gaData.getQuery();

  System.out.println("Ids: " + query.getIds());
  System.out.println("Start Date: " + query.getStartDate());
  System.out.println("End Date: " + query.getEndDate());
  System.out.println("Metrics: " + query.getMetrics()); // List
  System.out.println("Dimensions: " + query.getDimensions());
  System.out.println("Sort: " + query.getSort()); // List
  System.out.println("Segment: " + query.getSegment());
  System.out.println("Filters: " + query.getFilters());
  System.out.println("Start Index: " + query.getStartIndex());
  System.out.println("Max Results: " + query.getMaxResults());
}

Python

def print_query_info(results):
  query = results.get('query')
  for key, value in query.iteritems():
    print '%s = %s' % (key, value)

PHP

private function printQueryParameters(&$results) {
  $query = $results->getQuery();

  $html = '<pre>';
  foreach ($query as $paramName => $value) {
    $html .= "$paramName = $value\n";
  }
  $html .= '</pre>';

  print $html;
}

JavaScript

function printQuery(results) {
  output = [];

  for (var key in results.query) {
    output.push(key, ' = ', results.query[key], '\n');
  }

  alert(output.join(''));
}

Die Parameter metrics und sort werden als Werte in einer Liste zurückgegeben, während die anderen Parameter als Strings zurückgegeben werden.

Informationen zur Paginierung

Jede Core Reporting API-Anfrage kann Hunderttausende von Zeilen mit Google Analytics-Daten enthalten. Die Core Reporting API gibt jeweils nur eine Teilmenge zurück, die als einzelne Seite von Daten bezeichnet werden kann. Mit den Paginierungsfeldern können Sie alle Datenseiten abrufen.

Java

private void printPaginationInfo(GaData gaData) {
  System.out.println("Items Per Page: " + gaData.getItemsPerPage());
  System.out.println("Total Results: " + gaData.getTotalResults());
  System.out.println("Previous Link: " + gaData.getPreviousLink());
  System.out.println("Next Link: " + gaData.getNextLink());
}

Python

def print_pagination_info(results):
  print 'Items per page = %s' % results.get('itemsPerPage')
  print 'Total Results  = %s' % results.get('totalResults')
  print 'Previous Link  = %s' % results.get('previousLink')
  print 'Next Link      = %s' % results.get('nextLink')

PHP

private function getPaginationInfo(&$results) {
  $html = <<<HTML
<pre>
Items per page = {$results->getItemsPerPage()}
Total results  = {$results->getTotalResults()}
Previous Link  = {$results->getPreviousLink()}
Next Link      = {$results->getNextLink()}
</pre>
HTML;

  print $html;
}

JavaScript

function printPaginationInfo(results) {
  var output = [];

  output.push(
      'Items Per Page = ', results.itemsPerPage, '\n',
      'Total Results  = ', results.totalResults, '\n',
      'Previous Link  = ', results.previousLink, '\n',
      'Next Link      = ', results.nextLink, '\n');

  alert(output.join(''));
}

Das Feld totalResults stellt die Gesamtzahl der Datenzeilen dar, die in der Abfrage in Google Analytics abgeglichen wurden. Dieser kann größer sein als die tatsächliche Anzahl der Zeilen, die auf einer einzelnen Seite der Antwort zurückgegeben werden. Das Feld itemsPerPage gibt die Anzahl der auf dieser Seite zurückgegebenen Zeilen an.

Die Parameter previousLink und nextLink sind nur vorhanden, wenn eine vorherige oder nächste Seite vorhanden ist. Prüfen Sie diese Links, um herauszufinden, ob mehr Seiten von der Core Reporting API abgerufen werden können.

Gesamtergebnisse

Wie oben im Abschnitt zu Paginierungsinformationen erwähnt, kann eine Abfrage an die Core Reporting API vielen Datenzeilen in Google Analytics entsprechen, aber nur einen Teil der Daten zurückgeben. Die Gesamtmesswerte für alle übereinstimmenden Zeilen werden im Objekt totalsForAllResults zurückgegeben. Diese Daten sind hilfreich, um den Durchschnittswert zu berechnen.

Java

private void printTotalsForAllResults(GaData gaData) {
  Map totalsMap = gaData.getTotalsForAllResults();

  for (Map.Entry entry : totalsMap.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
  }
}

Python

def print_totals_for_all_results(results):
  totals = results.get('totalsForAllResults')

  for metric_name, metric_total in totals.iteritems():
    print 'Metric Name  = %s' % metric_name
    print 'Metric Total = %s' % metric_total

PHP

private function printTotalsForAllResults(&$results) {
  $totals = $results->getTotalsForAllResults();

  foreach ($totals as $metricName => $metricTotal) {
    $html .= "Metric Name  = $metricName\n";
    $html .= "Metric Total = $metricTotal";
  }

  print $html;
}

JavaScript

function printTotalsForAllResults(results) {
  var output = [];

  var totals = results.totalsForAllResults;
  for (metricName in totals) {
    output.push(
        'Metric Name  = ', metricName, '\n',
        'Metric Total = ', totals[metricName], '\n');
  }

  alert(output.join(''));
}

Arbeitsproben

Die vollständigen Beispiele finden Sie in der Core Reporting API im Beispielverzeichnis der einzelnen Clientbibliotheken.

Java

Google API-Java-Clientbibliothek Beispiel für die Core Reporting API

Python

Google API-Clientbibliothek für Python Core Reporting API-Beispiel

PHP

Google API-PHP-Clientbibliothek Core Reporting API-Beispiel

JavaScript

Google API JavaScript-Clientbibliothek Core Reporting API-Beispiel

JavaScript-Quelle