Your IP : 216.73.216.1
<?php
/**
* Handles interactions with Google Analytics' Stat API
*
**/
class GoogleAnalyticsStats
{
var $client = false;
var $accountId;
var $baseFeed = 'https://www.googleapis.com/analytics/v3';
var $token = false;
/**
* Constructor
*
* @param token - a one-time use token to be exchanged for a real token
**/
function __construct()
{
# Include SimplePie if it doesn't exist
if ( !class_exists('SimplePie') ) {
@require_once (ABSPATH . WPINC . '/class-feed.php');
}
if ( !class_exists('Google_Client') ) {
require_once 'google-api-php-client/src/Google_Client.php';
}
if ( !class_exists('Google_AnalyticsService') ) {
require_once 'google-api-php-client/src/contrib/Google_AnalyticsService.php';
}
$this->client = new Google_Client();
$this->client->setApprovalPrompt("force");
$this->client->setAccessType('offline');
$this->client->setClientId(GOOGLE_ANALYTICATOR_CLIENTID);
$this->client->setClientSecret(GOOGLE_ANALYTICATOR_CLIENTSECRET);
$this->client->setRedirectUri(GOOGLE_ANALYTICATOR_REDIRECT);
$this->client->setScopes(array("https://www.googleapis.com/auth/analytics"));
// Magic. Returns objects from the Analytics Service instead of associative arrays.
$this->client->setUseObjects(true);
try {
$this->analytics = new Google_AnalyticsService($this->client);
}
catch (Google_ServiceException $e)
{
print '(cas:48) There was an Analytics API service error ' . $e->getCode() . ':' . $e->getMessage();
return false;
}
}
function checkLogin()
{
$ga_google_authtoken = get_option('ga_google_authtoken');
if (!empty($ga_google_authtoken))
{
try
{
$this->client->setAccessToken($ga_google_authtoken);
}
catch( Google_AuthException $e )
{
print '(cas:72) Google Analyticator was unable to authenticate you with
Google using the Auth Token you pasted into the input box on the previous step. <br><br>
This could mean either you pasted the token wrong, or the time/date on your server is wrong,
or an SSL issue preventing Google from Authenticating. <br><br>
<a href="' . admin_url('/options-general.php?page=ga_reset').'"> Try Deauthorizing & Resetting Google Analyticator.</a>
<br><br><strong>Tech Info </strong> ' . $e->getCode() . ':' . $e->getMessage();
return false;
}
}
else
{
$authCode = get_option('ga_google_token');
if (empty($authCode)) return false;
try
{
$accessToken = $this->client->authenticate($authCode);
}
catch( Exception $e )
{
print '(cas:72) Google Analyticator was unable to authenticate you with
Google using the Auth Token you pasted into the input box on the previous step. <br><br>
This could mean either you pasted the token wrong, or the time/date on your server is wrong,
or an SSL issue preventing Google from Authenticating. <br><br>
<a href="' . admin_url('/options-general.php?page=ga_reset').'"> Try Deauthorizing & Resetting Google Analyticator.</a>
<br><br><strong>Tech Info </strong> ' . $e->getCode() . ':' . $e->getMessage();
return false;
}
if($accessToken)
{
$this->client->setAccessToken($accessToken);
update_option('ga_google_authtoken', $accessToken);
}
else
{
return false;
}
}
$this->token = $this->client->getAccessToken();
return true;
}
function deauthorize()
{
update_option('ga_google_token', '');
update_option('ga_google_authtoken', '');
}
function getSingleProfile()
{
$webproperty_id = get_option('ga_uid');
list($pre, $account_id, $post) = explode('-',$webproperty_id);
if (empty($webproperty_id)) return false;
try {
$profiles = $this->analytics->management_profiles->listManagementProfiles($account_id, $webproperty_id);
}
catch (Google_ServiceException $e)
{
print 'There was an Analytics API service error ' . $e->getCode() . ': ' . $e->getMessage();
return false;
}
catch(Exception $e)
{
print $e->getMessage();
return false;
}
$profile_id = $profiles->items[0]->id;
if (empty($profile_id)) return false;
$account_array = array();
array_push($account_array, array('id'=>$profile_id, 'ga:webPropertyId'=>$webproperty_id));
return $account_array;
}
function getAllProfiles()
{
$profile_array = array();
try {
$profiles = $this->analytics->management_webproperties->listManagementWebproperties('~all');
}
catch (Google_ServiceException $e)
{
print 'There was an Analytics API service error ' . $e->getCode() . ': ' . $e->getMessage();
}
catch(Exception $e)
{
print $e->getMessage();
}
if( !empty( $profiles->items ) )
{
foreach( $profiles->items as $profile )
{
$profile_array[ $profile->id ] = str_replace('http://','',$profile->name );
}
}
return $profile_array;
}
function getAnalyticsAccounts()
{
$analytics = new Google_AnalyticsService($this->client);
$accounts = $analytics->management_accounts->listManagementAccounts();
$account_array = array();
$items = $accounts->getItems();
if (count($items) > 0) {
foreach ($items as $key => $item)
{
$account_id = $item->getId();
$webproperties = $analytics->management_webproperties->listManagementWebproperties($account_id);
if (!empty($webproperties))
{
foreach ($webproperties->getItems() as $webp_key => $webp_item) {
$profiles = $analytics->management_profiles->listManagementProfiles($account_id, $webp_item->id);
$profile_id = $profiles->items[0]->id;
array_push($account_array, array('id'=>$profile_id, 'ga:webPropertyId'=>$webp_item->id));
}
}
}
return $account_array;
}
return false;
}
/**
* Sets the account id to use for queries
*
* @param id - the account id
**/
function setAccount($id)
{
$this->accountId = $id;
}
/**
* Get a specific data metrics
*
* @param metrics - the metrics to get
* @param startDate - the start date to get
* @param endDate - the end date to get
* @param dimensions - the dimensions to grab
* @param sort - the properties to sort on
* @param filter - the property to filter on
* @param limit - the number of items to get
* @return the specific metrics in array form
**/
function getMetrics($metric, $startDate, $endDate, $dimensions = false, $sort = false, $filter = false, $limit = false)
{
$analytics = new Google_AnalyticsService($this->client);
$params = array();
if ($dimensions)
{
$params['dimensions'] = $dimensions;
}
if ($sort)
{
$params['sort'] = $sort;
}
if ($filter)
{
$params['filters'] = $filter;
}
if ($limit)
{
$params['max-results'] = $limit;
}
// Just incase, the ga: is still used in the account id, strip it out to prevent it breaking
$filtered_id = str_replace( 'ga:', '', $this->accountId );
if(!$filtered_id){
echo 'Error - Account ID is blank';
return false;
}
return $analytics->data_ga->get(
'ga:'.$filtered_id,
$startDate,
$endDate,
$metric,
$params
);
}
/**
* Checks the date against Jan. 1 2005 because GA API only works until that date
*
* @param date - the date to compare
* @return the correct date
**/
function verifyStartDate($date)
{
if ( strtotime($date) > strtotime('2005-01-01') )
return $date;
else
return '2005-01-01';
}
} // END class