Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Analytics API on Codeigniter website

I've been trying to get Google API to work on my website for days now, but not getting it to work. Everywhere I search I find outdated examples... I need it to work with codeigniter and all I want to do is to fetch data from Google Analytics to show in the admin dashboard on my codeigniter website.

I understand that I need a Service Account, if I don't want to be authenticating everytime I look at the dashboard(?)

Can anyone please help me with getting this to work? Thank you so much in advance!

What I want done is: Fetch data from google analytics, return that data as maybe json, then I guess I can make a chart out of it with a plugin (perhaps some jQuery plugin already exists, or can I use googles own chart drawers?) and show this to administrators. I just want really simple data, as for example, how many users the last month...

like image 298
Michael Avatar asked Sep 04 '14 14:09

Michael


1 Answers

After about a week - and of course, on the same day I post this question, I finally manage to fix this myself.

This is how I go about:

I downloaded the latest Google Client API (for php) from their github.

I added the Google folder (src) in my application/third_party folder.

Inside my controller I included the required files by doing:

require_once(BASEPATH . '../application/third_party/Google/Client.php');
require_once(BASEPATH . '../application/third_party/Google/Service/Analytics.php');

Then I added the following code below that for authorization with Service Account (which you get from the Google Console and selecting your project > APIs & auth > Credentials > Then create a new Client ID, select Service Account, when done, press "Generate new p12 key" and add that key to your third_party/Google folder:

session_start();

$client_id = '<YOUR_CLIENT_ID>'; //Client ID
$service_account_name = '<YOUR_CLIENT_EMAIL>'; //Email Address 
$key_file_location = BASEPATH . '../application/third_party/Google/<YOUR KEY.p12>'; //key.p12

$client = new Google_Client();
$client->setApplicationName("ApplicationName");
$service = new Google_Service_Analytics($client);

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}

$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array(
        'https://www.googleapis.com/auth/analytics',
    ),
    $key,
    'notasecret'
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

The code below is for getting sessions (page visits) from the last 31 days

$analytics = new Google_Service_Analytics($client);

$profileId = "ga:<YOUR_PROFILE_ID>";
$startDate = date('Y-m-d', strtotime('-31 days')); // 31 days from now
$endDate = date('Y-m-d'); // todays date

$metrics = "ga:sessions";

$optParams = array("dimensions" => "ga:date");
$results = $analytics->data_ga->get($profileId, $startDate, $endDate, $metrics, $optParams);

$data['report'] = $results->rows; //To send it to the view later

To get all the dimensions and metrics that you can use, use this link. Example on how to send it to the view:

$this->view->load('your_view', $data);

To write it out as a chart I just used Google charts, in the JS (in the view) I just looped the data from $data['report'] to draw a chart.

Hope this will help people with this problem in the future.

like image 71
Michael Avatar answered Nov 16 '22 13:11

Michael