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?
1 Answer 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>
2 Comments
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.Explore related questions
See similar questions with these tags.