2

So I want to display GA chart in custom PHP backend. So I created APP in https://console.developers.google.com/ but I cant figure out how to access my own google analytics data withouth asking for user to login. For now I have simple code:

 $client = new Google_Client();
 $client->setApplicationName("App Name");
 $client->setClientId(CLIENT_ID);
 $client->setClientSecret(CLIENT_SECRET);
 $client->setDeveloperKey(APP_ID);
 $client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly'));
 $client->authenticate();
 $token = $client->getAccessToken();
 $service = new Google_Service_Analytics($client);
$optParams = array(
 'sort' => 'ga:pageviews',
 'max-results' => '5');
$results = $service->data_ga->get(
 'ga:123456',
 '2015-01-01',
 '2015-01-30',
 'ga:pagePath',
 $optParams);
print_r($results);

I guess I am doing everything wrong :), so my question would be, how to allow anyone to access my own google analytics data through PHP script?

Linda Lawton - DaImTo
118k40 gold badges229 silver badges511 bronze badges
asked May 2, 2015 at 13:20

1 Answer 1

1

If you want to access your own account, then I suggest you look into using a service account.

Once you have created the service account on the Google Developer console, remember to go to your Google Analytics account and give the service account email address access to your Google Analytics data at the Account level. You can read about how to do that here Google Service Account PHP code ripped from that tutorial.

session_start(); 
require_once 'Google/Client.php';
require_once 'Google/Service/Analytics.php'; 
/************************************************ 
 The following 3 values an befound in the setting 
 for the application you created on Google 
 Developers console. Developers console.
 The Key file should be placed in a location 
 that is not accessable from the web. outside of 
 web root. web root.
 In order to access your GA account you must 
 Add the Email address as a user at the 
 ACCOUNT Level in the GA admin. 
 ************************************************/
$client_id = 'xxx-nk421gjc2v8mlr2qnmmqaak04ntb1dbp.apps.googleusercontent.com';
$Email_address = 'xxx-nk421gjc2v8mlr2qnmmqaak04ntb1dbp@developer.gserviceaccount.com'; 
$key_file_location = '629751513db09cd21a941399389f33e5abd633c9-privatekey.p12'; 
$client = new Google_Client(); 
$client->setApplicationName("Client_Library_Examples");
$key = file_get_contents($key_file_location); 
// seproate additional scopes with a comma 
$scopes ="https://www.googleapis.com/auth/analytics.readonly"; 
$cred = new Google_Auth_AssertionCredentials( 
 $Email_address, 
 array($scopes), 
 $key 
 ); 
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) { 
 $client->getAuth()->refreshTokenWithAssertion($cred); 
} 
$service = new Google_Service_Analytics($client);
$accounts = $service->management_accountSummaries->listManagementAccountSummaries();
//calulating start date 
$date = new DateTime(date("Y-m-d")); 
$date->sub(new DateInterval('P10D')); 
//Adding Dimensions
$params = array('dimensions' => 'ga:userType'); 
// requesting the data 
$data = $service->data_ga->get("ga:78110423", $date->format('Y-m-d'), date("Y-m-d"), "ga:users,ga:sessions", $params ); 
?><html> 
<?php echo $date->format('Y-m-d') . " - ".date("Y-m-d"). "\n";?> 
<table> 
<tr> 
<?php 
//Printing column headers
foreach($data->getColumnHeaders() as $header){
 print "<td>".$header['name']."</td>"; 
} 
?> 
</tr> 
<?php 
//printing each row.
foreach ($data->getRows() as $row) { 
 print "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td></tr>"; 
} 
//printing the total number of rows
?> 
<tr><td colspan="2">Rows Returned <?php print $data->getTotalResults();?> </td></tr> 
</table> 
</html> 
answered May 6, 2015 at 8:03
Sign up to request clarification or add additional context in comments.

2 Comments

Awesome, just what I needed. However, that tutorial is a little bit old, so we need to change require_once 'Google/Client.php'; and require_once 'Google/Service/Analytics.php'; to require_once 'Google/autoload.php'; and further notice, that when you add service email to GA account You need to wait (don't know how long) for it to sync between google servers (I guess) or You will get error: (403) User does not have any Google Analytics account.
I will update the tutorial asap thanks for the heads up.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.