ankush981
ankush981

Reputation: 5417

Google Analytics API (PHP) pull data from second property

For a particular website in my Google Analytics account, two properties are registered for the same website. Don't know who set it up like this first, but for now the first one has data from, say, 2010 to 2012, and the second has 2013 onward. I want to access the second property. Here's what the reporting page looks like (names smudged out):

enter image description here

By following the official tutorial for PHP, I'm able to access the first account and display its total sessions. But I'm not able to access the second account. I thought I'd change the following function:

function getFirstprofileId(&$analytics) {

    $index = 0;
    $accounts = $analytics->management_accounts->listManagementAccounts();

    echo "<pre>";
    print_r($accounts);
    echo "</pre>";

    if (count($accounts->getItems()) > 0) {
        $items = $accounts->getItems();
        $firstAccountId = $items[$index]->getId();

        $webproperties = $analytics->management_webproperties
        ->listManagementWebproperties($firstAccountId);

        if (count($webproperties->getItems()) > 0) {
            $items = $webproperties->getItems();
            $firstWebpropertyId = $items[$index]->getId();

            $profiles = $analytics->management_profiles
            ->listManagementProfiles($firstAccountId, $firstWebpropertyId);

            if (count($profiles->getItems()) > 0) {
                $items = $profiles->getItems();
                return $items[$index]->getId();

            } else {
                throw new Exception('No views (profiles) found for this user.');
            }
        } else {
            throw new Exception('No webproperties found for this user.');
        }
    } else {
        throw new Exception('No accounts found for this user.');
    }
}

The $index = 0; thing you see is what I did, thinking that just by changing $index to 1 or something, I'll be able to access the next property, but it throws me an error saying Call to a member function getId() on a non-object on the code $firstAccountId = $items[$index]->getId();

Any help will be appreciated.

Upvotes: 1

Views: 489

Answers (1)

Linda Lawton - DaImTo
Linda Lawton - DaImTo

Reputation: 116918

The problem you are having is probably related to the fact that you are using an old tutorial. Which uses Oauth2 and the old PHP client lib. Because you are only trying to access your own data I recommend you go with a service account.

The current php client lib can be found on github: Google-api-php-client

Below is the code from my tutorial on using a service account with php to access Google Analytics Data.

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 = '1046123799103-nk421gjc2v8mlr2qnmmqaak04ntb1dbp.apps.googleusercontent.com';
$Email_address = '1046123799103-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>     

Make sure that you give the service account email address access at the Account level in Google Analytics.

Code ripped from the tutorial: Google Service account PHP

Upvotes: 2

Related Questions