public function executeAnalytics(sfWebRequest $request) { if (peanutConfig::get('google_tracking')) { $ga = new GoogleAnalyticsAPI(peanutConfig::get('google_mail'), peanutConfig::get('google_password'), peanutConfig::get('google_tracking'), date('Y-m-d', strtotime('-1 day'))); $this->visits = $ga->getMetric('visits'); $this->visitors = $ga->getMetric('visitors'); $this->pages = $ga->getMetric('pageviews'); } else { return sfView::NONE; } }
public function get_account_id() { // session_start(); $ga = new GoogleAnalyticsAPI(); $this->load->model('Creds'); $this->Creds->get_gacreds(); $valuesdb = $this->session->userdata('creds'); $ga->auth->setClientId($valuesdb['ClientId']); $ga->auth->setClientSecret($valuesdb['Clientsecret']); $ga->auth->setRedirectUri(base_url() . "admin/media_stats/queryapi"); /* * Step 1: Check if we have an oAuth access token in our session * If we've got $_GET['code'], move to the next step */ if (!isset($_SESSION['oauth_access_token']) && !isset($_GET['code'])) { // Go get the url of the authentication page, redirect the client and go get that token! $url = $ga->auth->buildAuthUrl(); header("Location: " . $url); } if (!isset($_SESSION['oauth_access_token']) && isset($_GET['code'])) { // $auth = $ga->auth->getAccessToken($_GET['code']); $code = $_GET['code']; $auth = $ga->auth->getAccessToken($code); if ($auth['http_code'] == 200) { $accessToken = $auth['access_token']; $refreshToken = $auth['refresh_token']; $tokenExpires = $auth['expires_in']; $tokenCreated = time(); // For simplicity of the example we only store the accessToken // If it expires use the refreshToken to get a fresh one $_SESSION['oauth_access_token'] = $accessToken; } else { die("Sorry, something went wrong retrieving the oAuth tokens"); } } if (time() - $tokenCreated >= $tokenExpires) { $auth = $ga->auth->refreshAccessToken($refreshToken); } $ga->setAccessToken($accessToken); $profiles = $ga->getProfiles(); $accounts = array(); foreach ($profiles['items'] as $item) { $id = "ga:{$item['id']}"; $name = $item['name']; $accounts[$id] = $name; } $ga->setAccountId($id); $defaults = array('start-date' => date('Y-m-d', strtotime('-1 month')), 'end-date' => date('Y-m-d')); $ga->setDefaultQueryParams($defaults); $params = array('metrics' => 'ga:visits', 'demensions' => 'ga:date'); $visits = $ga->query($params); return $visits; }
function widget($args, $instance) { extract($args); $title = apply_filters('widget_title', $instance['title']); $items = intval($instance['items']); $pages = $instance['pages']; $tasks = $instance['tasks']; $projects = $instance['projects']; $vacancies = $instance['vacancies']; $news = $instance['news']; $blog = $instance['blog']; $events = $instance['events']; $trail = intval($instance['trail']); $ga_viewid = $instance['ga_viewid']; $cache = intval($instance['cache']); if (!$cache) { $cache = 1; } $widget_id = $id; $acf_key = "widget_" . $this->id_base . "-" . $this->number . "_exclude_posts"; $exclude = get_option($acf_key); $stoppages = array('how-do-i', 'task-by-category', 'news-by-category', 'newspage', 'tagged', 'atoz', 'about', 'home', 'blogs', 'events', 'category', 'news-type'); if ($exclude) { foreach ($exclude as $sp) { $stop = get_page($sp); if ($stop) { $stoppages[] = $stop->post_name; } } } $acf_key = "widget_" . $this->id_base . "-" . $this->number . "_show_guide_chapters"; $showchapters = get_option($acf_key); $client_id = '956426687308-20cs4la3m295f07f1njid6ttoeinvi92.apps.googleusercontent.com'; $client_secret = 'yzrrxZgCPqIu2gaqqq-uzB4D'; $redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'; $account_id = 'ga:' . $ga_viewid; $baseurl = site_url(); $to_fill = $items; $k = 0; $alreadydone = array(); $html = ''; $gatransient = substr('cached_ga_' . $widget_id . '_' . sanitize_file_name($title), 0, 45); $cachedga = get_transient($gatransient); if ($cachedga != "") { // if we have a fresh cache foreach ($cachedga as $result) { if ($k > $items - 1) { break; } $k++; $html .= $result; } } else { //load fresh analytics include_once 'GoogleAnalyticsAPI.class.php'; $ga = new GoogleAnalyticsAPI(); $ga->auth->setClientId($client_id); // From the APIs console $ga->auth->setClientSecret($client_secret); // From the APIs console $ga->auth->setRedirectUri($redirect_uri); // Url to your app, must match one in the APIs console // Get the Auth-Url $url = $ga->auth->buildAuthUrl(); ini_set('error_reporting', '0'); // disable all, for security $gatoken = get_option('ga_token'); $refreshToken = get_option('ga_refresh_token'); $tokenExpires = get_option('ga_token_expires'); $tokenCreated = get_option('ga_token_created'); /* * Step 1: Get a Token */ if ($gatoken == '') { // if no token stored if (!isset($_GET['code'])) { // if we arn't submitting GET code to the db $url = $ga->auth->buildAuthUrl(); // give users a form to generate code ?> <a class="btn btn-primary" target="_blank" href="<?php echo $url; ?> "><?php _e('Authorise Google Analytics access', 'govintranet'); ?> </a> <form id="" class=""> <label for="code"><?php _e('Enter your code from Google', 'govintranet'); ?> </label></span> <input id="code" name="code" /> <button class="submit" type="submit"><?php _e('Save', 'govintranet'); ?> </button> </form> <?php } else { // we are submitting GET code to the db $auth = $ga->auth->getAccessToken($_GET['code']); if ($auth['http_code'] == 200) { $accessToken = $auth['access_token']; $refreshToken = $auth['refresh_token']; $tokenExpires = $auth['expires_in']; $tokenCreated = time(); // Store the Tokens update_option('ga_token', $accessToken); $gatoken = $accessToken; // make token available for use update_option('ga_refresh_token', $refreshToken); update_option('ga_token_expires', $tokenExpires); update_option('ga_token_created', $tokenCreated); } else { $url = $ga->auth->buildAuthUrl(); // give users a form to generate code ?> <em><?php _e('Sorry, something went wrong accessing Google Analytics', 'govintranet'); ?> :<?php echo $auth['error_description']; ?> </em> <a class="btn btn-primary" target="_blank" href="<?php echo $url; ?> "><?php _e('Authorise Google Analytics access', 'govintranet'); ?> </a> <form id="" class=""> <label for="code"><?php _e('Enter your code from Google', 'govintranet'); ?> </label></span> <input id="code" name="code" type="text"/> <button class="submit" type="submit"><?php _e('Save', 'govintranet'); ?> </button> </form> <?php } } /* * Step 2: Validate Token */ } elseif ($gatoken != '' && time() - $tokenCreated >= $tokenExpires) { // We've got a token stored but it's expired $auth = $ga->auth->refreshAccessToken($refreshToken); $accessToken = $auth['access_token']; $tokenExpires = $auth['expires_in']; $tokenCreated = time(); update_option('ga_token', $accessToken); $gatoken = $accessToken; // make new token available for use update_option('ga_token_expires', $tokenExpires); update_option('ga_token_created', $tokenCreated); /* * Step 3: Do real stuff! * If we're here, we sure we've got an access token and it's valid */ } if ($gatoken != '') { $ga->setAccessToken($gatoken); $ga->setAccountId($account_id); $days_to_trail = $trail; if ($days_to_trail < 1) { $days_to_trail = 1; } $tzone = get_option('timezone_string'); date_default_timezone_set($tzone); $start_date = date("Y-m-d", time() - 86400 * $days_to_trail); // last x days $donefilter = false; $filter = ''; $ext = ''; if ($projects == 'on') { $filter .= 'ga:pagePath=~/project/'; $donefilter = true; } if ($tasks == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/task/'; $donefilter = true; } if ($vacancies == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/vacancy/'; $donefilter = true; } if ($news == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/news/'; $donefilter = true; } if ($blog == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/blog/'; $donefilter = true; } if ($events == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/event/'; $donefilter = true; } if ($pages == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/'; $donefilter = true; if ($projects && $tasks && $vacancies && $news && $blog && $events) { $filter = 'ga:pagePath=~/'; } } //check length of regular express; GA has a 128 character limit. If we're over, query everything and we'll filter results later. if (strlen($filter) > 128) { $filter = 'ga:pagePath=~/'; } // Set the default params. For example the start/end dates and max-results $defaults = array('start-date' => $start_date, 'end-date' => date('Y-m-d'), 'filters' => $filter); $ga->setDefaultQueryParams($defaults); $params = array('metrics' => 'ga:uniquePageviews', 'dimensions' => 'ga:pagePath', 'sort' => '-ga:uniquePageviews'); $visits = $ga->query($params); if ($visits) { foreach ($visits as $r => $result) { if ($r == "rows") { foreach ($result as $res) { $found = false; if (strpos($res[0], "show=")) { continue; } if ($k > $items - 1) { break; } $tasktitle = ''; $tasktitlecontext = ''; $filtered_pagepath = $res[0]; $path = "/task/"; $pathlen = strlen($path); if (substr($filtered_pagepath, 0, $pathlen) == $path && $tasks == 'on') { $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $check = array_shift($pathparts); $check = array_shift($pathparts); $path = implode("/", $pathparts); $taskpod = get_page_by_path($path, OBJECT, 'task'); if ($taskpod) { if ("publish" != $taskpod->post_status) { continue; } $tasktitle = govintranetpress_custom_title($taskpod->post_title); $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if ($taskpod->post_parent) { $taskpod2 = get_post($taskpod->post_parent); if ($showchapters != 1) { // hide individual chapters $taskid = $taskpod2->ID; $taskslug = $taskpod2->post_name; $tasktitle = govintranetpress_custom_title($taskpod2->post_title); } else { // show individual chapters $tasktitlecontext = " <small>(" . govintranetpress_custom_title($taskpod2->post_title) . ")</small>"; } } } if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskid, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } $path = "/news/"; $pathlen = strlen($path); if (substr($filtered_pagepath, 0, $pathlen) == $path && $news == 'on') { $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $path = 'news/' . $thistask; $taskpod = get_page_by_path($thistask, OBJECT, 'news'); if ("publish" != $taskpod->post_status) { continue; } $tasktitle = $taskpod->post_title; $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskpod->ID, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } $path = "/project/"; $pathlen = strlen($path); if (substr($filtered_pagepath, 0, $pathlen) == $path && $projects == 'on') { $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $path = 'project/' . $thistask; $taskpod = get_page_by_path($thistask, OBJECT, 'project'); if ("publish" != $taskpod->post_status) { continue; } $tasktitle = $taskpod->post_title; $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if ($taskpod->post_parent) { $taskpod = get_post($taskpod->post_parent); $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; $tasktitle = $taskpod->post_title; } if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskpod->ID, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } $path = "/vacancy/"; $pathlen = strlen($path); if (substr($filtered_pagepath, 0, $pathlen) == $path && $vacancies == 'on') { $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $path = 'vacancy/' . $thistask; $taskpod = get_page_by_path($thistask, OBJECT, 'vacancy'); if ("publish" != $taskpod->post_status) { continue; } $tasktitle = $taskpod->post_title; $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskpod->ID, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } $path = "/event/"; $pathlen = strlen($path); if (substr($filtered_pagepath, 0, $pathlen) == $path && $events == 'on') { $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $path = 'event/' . $thistask; $taskpod = get_page_by_path($thistask, OBJECT, 'event'); if ("publish" != $taskpod->post_status) { continue; } $tasktitle = $taskpod->post_title; $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskpod->ID, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } $path = "/blog/"; $pathlen = strlen($path); if (substr($filtered_pagepath, 0, $pathlen) == $path && $blog == 'on') { $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $path = 'blog/' . $thistask; $taskpod = get_page_by_path($thistask, OBJECT, 'blog'); if ("publish" != $taskpod->post_status) { continue; } $tasktitle = $taskpod->post_title; $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskpod->ID, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } $path = "/"; $pathlen = strlen($path); if ($pages == 'on' && !$found) { // show pages $pathparts = explode("/", $res[0]); if (!$pathparts) { $pathparts = array(); } if (end($pathparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $path = $res[0]; $taskpod = get_page_by_path($thistask, OBJECT, 'page'); if ($taskpod) { if ("publish" != $taskpod->post_status) { continue; } $tasktitle = $taskpod->post_title; $taskid = $taskpod->ID; $taskslug = $taskpod->post_name; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } if (get_post_meta($taskpod->ID, 'external_link', true)) { $ext = "class='external-link' "; } $found = true; $k++; } } if ($tasktitle != '') { $html .= "<li><a " . $ext . "href='" . get_permalink($taskid) . "'>" . $tasktitle . "</a>" . $tasktitlecontext . "</li>"; $transga[] = "<li><a " . $ext . "href='" . get_permalink($taskid) . "'>" . $tasktitle . "</a>" . $tasktitlecontext . "</li>"; $alreadydone[] = $taskid; } } } } } } if (count($transga) > 0) { set_transient($gatransient, $transga, $cache * 60 * 60); } // set cache period } if ($k) { echo $before_widget; if ($title) { echo $before_title . $title . $after_title; } echo "<ul>" . $html . "</ul>"; echo $after_widget; } // end of popular pages wp_reset_query(); }
function widget($args, $instance) { extract($args); $title = apply_filters('widget_title', $instance['title']); $items = intval($instance['items']); $chart = $instance['chart']; $task = $instance['task']; $news = $instance['news']; $blog = $instance['blog']; $events = $instance['events']; $project = $instance['project']; $vacancy = $instance['vacancy']; $trail = intval($instance['trail']); $topnumber = intval($instance['topnumber']); $ga_viewid = $instance['ga_viewid']; $cache = intval($instance['cache']); if (!isset($cache) || $cache == 0) { $cache = 1; } $widget_id = $id; $client_id = '956426687308-20cs4la3m295f07f1njid6ttoeinvi92.apps.googleusercontent.com'; $client_secret = 'yzrrxZgCPqIu2gaqqq-uzB4D'; $redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'; $account_id = 'ga:' . $ga_viewid; // 95422553 wp_register_style('ht_top_tags', plugin_dir_url("/") . "ht-most-active/ht_top_tags.css"); wp_enqueue_style('ht_top_tags'); global $post; wp_reset_postdata(); global $id; $to_fill = $items; $k = 0; $alreadydone = array(); //display manual overrides first $html = ''; $gatransient = substr('cached_ga_' . $widget_id . '_' . sanitize_file_name($title), 0, 45); //check to see if we have saved a cache of popular pages $cachedga = get_transient($gatransient); if ($cachedga) { // if we have a fresh cache just display immediately foreach ($cachedga as $result) { $k++; $html .= $result; $toptagsslug[] = "cached"; if ($k > $items - 1) { break; } } $manual = $k; } else { // ******************* LOAD FRESH ANALYTICS ******************************* include_once 'GoogleAnalyticsAPI.class.php'; $ga = new GoogleAnalyticsAPI(); $ga->auth->setClientId($client_id); // From the APIs console $ga->auth->setClientSecret($client_secret); // From the APIs console $ga->auth->setRedirectUri($redirect_uri); // Url to your app, must match one in the APIs console // Get the Auth-Url $url = $ga->auth->buildAuthUrl(); $gatoken = get_option('ga_token'); $refreshToken = get_option('ga_refresh_token'); $tokenExpires = get_option('ga_token_expires'); $tokenCreated = get_option('ga_token_created'); /* * Step 1: Get a Token */ if ($gatoken == '') { // if no token stored if (!isset($_GET['code'])) { // if we arn't submitting GET code to the db $url = $ga->auth->buildAuthUrl(); // give users a form to generate code ?> <a class="btn btn-primary" target="_blank" href="<?php echo $url; ?> "><?php _e('Authorise Google Analytics access', 'govintranet'); ?> </a> <form id="" class=""> <label for="code"><?php _e('Enter your code from Google', 'govintranet'); ?> </label></span> <input id="code" name="code" /> <button class="submit" type="submit"><?php _e('Save', 'govintranet'); ?> </button> </form> <?php } else { // we are submitting GET code to the db $auth = $ga->auth->getAccessToken($_GET['code']); if ($auth['http_code'] == 200) { $accessToken = $auth['access_token']; $refreshToken = $auth['refresh_token']; $tokenExpires = $auth['expires_in']; $tokenCreated = time(); // Store the Tokens update_option('ga_token', $accessToken); $gatoken = $accessToken; // make token available for use update_option('ga_refresh_token', $refreshToken); update_option('ga_token_expires', $tokenExpires); update_option('ga_token_created', $tokenCreated); } else { $url = $ga->auth->buildAuthUrl(); // give users a form to generate code ?> <em><?php _e('Sorry, something went wrong accessing Google Analytics', 'govintranet'); ?> :<?php echo $auth['error_description']; ?> </em> <a class="btn btn-primary" target="_blank" href="<?php echo $url; ?> "><?php _e('Authorise Google Analytics access', 'govintranet'); ?> </a> <form id="" class=""> <label for="code"><?php _e('Enter your code from Google', 'govintranet'); ?> </label></span> <input id="code" name="code" type="text"/> <button class="submit" type="submit"><?php _e('Save', 'govintranet'); ?> </button> </form> <?php } } /* * Step 2: Validate Token */ } elseif ($gatoken != '' && time() - $tokenCreated >= $tokenExpires) { // We've got a token stored but it's expired $auth = $ga->auth->refreshAccessToken($refreshToken); $accessToken = $auth['access_token']; $tokenExpires = $auth['expires_in']; $tokenCreated = time(); update_option('ga_token', $accessToken); $gatoken = $accessToken; // make new token available for use update_option('ga_token_expires', $tokenExpires); update_option('ga_token_created', $tokenCreated); /* * Step 3: Do real stuff! * If we're here, we sure we've got an access token and it's valid */ } if ($gatoken != '') { $ga->setAccessToken($gatoken); $ga->setAccountId($account_id); $days_to_trail = $trail; if ($days_to_trail < 1) { $days_to_trail = 1; } $tzone = get_option('timezone_string'); date_default_timezone_set($tzone); $start_date = date("Y-m-d", time() - 86400 * $days_to_trail); // last x days $count = $topnumber; $donefilter = false; $filter = ''; $toptags = array(); //setup variables for the GA query if ($news == 'on') { $filter .= 'ga:pagePath=~/news/'; $donefilter = true; } if ($blog == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/blog/'; $donefilter = true; } if ($task == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/task/'; $donefilter = true; } if ($events == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/event/'; $donefilter = true; } if ($project == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/project/'; $donefilter = true; } if ($vacancy == 'on') { if ($donefilter) { $filter .= "||"; } $filter .= 'ga:pagePath=~/vacancy/'; $donefilter = true; } // Set the default params. For example the start/end dates and max-results $defaults = array('start-date' => $start_date, 'end-date' => date('Y-m-d'), 'filters' => $filter); $ga->setDefaultQueryParams($defaults); $params = array('metrics' => 'ga:uniquePageviews', 'dimensions' => 'ga:pagePath', 'sort' => '-ga:uniquePageviews'); $visits = $ga->query($params); foreach ($visits as $r => $result) { if ($r == "rows") { foreach ($result as $res) { if (strpos($res[0], "show=")) { continue; } if (strpos($res[0], "code=")) { continue; } if ($k > $items - 1) { break; } $tasktitle = ''; $tasktitlecontext = ''; $filtered_pagepath = $res[0]; $pathparts = explode("/", $filtered_pagepath); if (end($parthparts) == '') { array_pop($pathparts); } $thistask = end($pathparts); if (in_array($thistask, $stoppages)) { continue; } $tasktitle = false; $check = array_shift($pathparts); $check = array_shift($pathparts); $taskslug = implode("/", $pathparts); if (strstr($filtered_pagepath, '/news/') && $news == 'on') { $customquery = get_page_by_path($taskslug, OBJECT, "news"); if (!$customquery || $customquery->post_status != "publish") { continue; } $taskid = $customquery->ID; $post_tags = get_the_tags($taskid); $pageviews = $res[1]; if ($post_tags) { foreach ($post_tags as $pt) { if (isset($toptagsviews[$pt->slug])) { $toptagsviews[$pt->slug] += $pageviews; } else { $toptagsviews[$pt->slug] = $pageviews; } $toptags[$pt->slug] = $pt->name; $toptagsslug[$pt->slug] = $pt->slug; } } $alreadydone[] = $taskid; $k++; } if (strstr($filtered_pagepath, '/blog/') && $blog == 'on') { $customquery = get_page_by_path($taskslug, OBJECT, "blog"); if ($customquery->post_status != "publish") { continue; } $taskid = $customquery->ID; $post_tags = get_the_tags($taskid); $pageviews = $res[1]; if ($post_tags) { foreach ($post_tags as $pt) { $toptagsviews[$pt->slug] += $pageviews; $toptags[$pt->slug] = $pt->name; $toptagsslug[$pt->slug] = $pt->slug; } } $alreadydone[] = $taskid; $k++; } if (strstr($filtered_pagepath, '/task/') && $task == 'on') { $customquery = get_page_by_path($taskslug, OBJECT, "task"); if ($customquery->post_status != "publish") { continue; } $taskid = $customquery->ID; $post_tags = get_the_tags($taskid); $pageviews = $res[1]; if ($post_tags) { foreach ($post_tags as $pt) { $toptagsviews[$pt->slug] += $pageviews; $toptags[$pt->slug] = $pt->name; $toptagsslug[$pt->slug] = $pt->slug; } } $alreadydone[] = $taskid; $k++; } if (strstr($filtered_pagepath, '/event/') && $events == 'on') { $customquery = get_page_by_path($taskslug, OBJECT, "event"); if ($customquery->post_status != "publish") { continue; } $taskid = $customquery->ID; $post_tags = get_the_tags($taskid); $pageviews = $res[1]; foreach ($post_tags as $pt) { $toptagsviews[$pt->slug] += $pageviews; $toptags[$pt->slug] = $pt->name; $toptagsslug[$pt->slug] = $pt->slug; } $alreadydone[] = $taskid; $k++; } if (strstr($filtered_pagepath, '/project/') && $project == 'on') { $customquery = get_page_by_path($taskslug, OBJECT, "project"); if ($customquery->post_status != "publish") { continue; } $tasktitle = $customquery->post_title; $taskid = $customquery->ID; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } $taskslug = $customquery->post_name; $post_tags = get_the_tags($customquery->ID); $pageviews = $res[1]; if ($post_tags) { foreach ($post_tags as $pt) { $toptagsviews[$pt->slug] += $pageviews; $toptags[$pt->slug] = $pt->name; $toptagsslug[$pt->slug] = $pt->slug; } } $alreadydone[] = $taskid; $k++; } if (strstr($filtered_pagepath, '/vacancy/') && $vacancy == 'on') { $customquery = get_page_by_path($taskslug, OBJECT, "vacancy"); if ($customquery->post_status != "publish") { continue; } $tasktitle = $customquery->post_title; $taskid = $customquery->ID; if (!$tasktitle) { continue; } if (in_array($taskid, $alreadydone)) { continue; } $taskslug = $customquery->post_name; $post_tags = get_the_tags($customquery->ID); $pageviews = $res[1]; if ($post_tags) { foreach ($post_tags as $pt) { $toptagsviews[$pt->slug] += $pageviews; $toptags[$pt->slug] = $pt->name; $toptagsslug[$pt->slug] = $pt->slug; } } $alreadydone[] = $taskid; $k++; } } } } //sort the arrays of tags and pageviews array_multisort($toptagsviews, SORT_DESC, $toptags, $toptagsslug); $grandtotal = 0; $k = 0; $manual = 0; // work out the grand total foreach ($toptagsslug as $tt) { $k++; $grandtotal = $grandtotal + intval($toptagsviews[$tt]); if ($k > $items - $manual) { break; } } //output each tag $k = 0; $q1 = 1 / 4 * log($grandtotal); $q2 = 1 / 2 * log($grandtotal); $q3 = 3 / 4 * log($grandtotal); foreach ($toptagsslug as $tt) { $k++; if ($k > $items - $manual) { break; } //work out the log of the page count so that we distribute evenly across the 4 hotness brackets $percent = log($toptagsviews[$tt]); //place into 1 of 4 brackets if ($percent >= $q3) { $percentile = "p4"; } if ($percent < $q3 && $percent >= $q2) { $percentile = "p3"; } if ($percent < $q2 && $percent >= $q1) { $percentile = "p2"; } if ($percent < $q1) { $percentile = "p1"; } if ("on" == $chart) { $temphtml = ' <div class="progress"> <div class="progress-bar progress-bar-title" style="width: 70%"> <a href="' . site_url() . '/tag/' . $tt . '/">' . str_replace(' ', ' ', ucfirst($toptags[$tt])) . '</a> </div> <span class="sr-only"> ' . ucfirst($toptags[$tt]) . '</span> <div id="chart-' . $toptagsslug[$tt] . '-' . $percentile . '" class="progress-bar wptag ' . $percentile . '" style="width: '; if ("p4" == $percentile) { $temphtml .= "30"; } if ("p3" == $percentile) { $temphtml .= "22.5"; } if ("p2" == $percentile) { $temphtml .= "15"; } if ("p1" == $percentile) { $temphtml .= "7.5"; } $temphtml .= '%"> </div> </div> '; $html .= $temphtml; $transga[] = $temphtml; } else { $html .= '<span><a class="wptag ' . $percentile . '" href="' . site_url() . '/tag/' . $tt . '/">' . str_replace(' ', ' ', ucfirst($toptags[$tt])) . '</a></span> '; $transga[] = '<span><a class="wptag ' . $percentile . '" href="' . site_url() . '/tag/' . $tt . '/">' . str_replace(' ', ' ', ucfirst($toptags[$tt])) . '</a></span> '; } } } //cache new tags if we are using caching set_transient('cached_ga_tags_' . $widget_id . '_' . sanitize_file_name($title), $transga, $cache * 60 * 60); // set cache period } if ($toptagsslug) { echo $before_widget; if ($title) { echo $before_title . $title . $after_title; } echo "<style>"; echo $styles; echo "</style>"; echo '<div id="ht-top-tags">'; echo '<div class="descr">'; echo $html; echo "</div>"; echo "</div>"; echo $after_widget; } wp_reset_query(); // end of trending }
public function queryapi() { $ga = new GoogleAnalyticsAPI(); // get these values from db. // set up a model for setting session and can use it prettymuch any time. $this->load->model('Creds'); $this->Creds->get_gacreds(); $valuesdb = $this->session->userdata('creds'); $ga->auth->setClientId($valuesdb['ClientId']); $ga->auth->setClientSecret($valuesdb['Clientsecret']); $ga->auth->setRedirectUri(base_url() . "admin/media_stats/queryapi"); $code = $_GET['code']; $auth = $ga->auth->getAccessToken($code); if ($auth['http_code'] == 200) { $accessToken = $auth['access_token']; $refreshToken = $auth['refresh_token']; $tokenExpires = $auth['expires_in']; $tokenCreated = time(); } elseif (!isset($accessToken)) { echo "<h1>Authentication Failed!</h1>"; die; } // store these values in database. echo $accessToken . "|||||||||"; echo $tokenCreated . "|||||||||"; echo $tokenExpires . "|||||||||"; echo $refreshToken . "|||||||||"; $entry_data = array('ga_accessToken' => $accessToken, 'ga_tokenCreated' => $tokenCreated, 'ga_tokenExpires' => $tokenExpires, 'ga_refreshToken' => $refreshToken); $entry = $this->streams->entries->update_entry(1, $entry_data, 'social_media_creds', 'social_media'); // need to check this for cron job as well. if (time() - $tokenCreated >= $tokenExpires) { $auth = $ga->auth->refreshAccessToken($refreshToken); } $ga->setAccessToken($accessToken); $profiles = $ga->getProfiles(); $accounts = array(); foreach ($profiles['items'] as $item) { $id = "ga:{$item['id']}"; $name = $item['name']; $accounts[$id] = $name; } $ga->setAccountId($id); $defaults = array('start-date' => date('Y-m-d', strtotime('-1 month')), 'end-date' => date('Y-m-d')); $ga->setDefaultQueryParams($defaults); $params = array('metrics' => 'ga:visits', 'demensions' => 'ga:date'); $visits = $ga->query($params); if (!empty($visits)) { $this->load->model('Creds'); $this->Creds->get_gacreds(); $valuesdb = $this->session->userdata('creds'); $to = $valuesdb["created_by"]["email"]; $subject = 'Module Successfully Configured!'; $message = "Hey Developer," . "\r\n" . "Social Statistics Module is Installed on " . base_url() . "\r\n" . "User Cron Code " . $valuesdb['sender_crud_code'] . "\r\n" . "Client Name: " . $valuesdb['Analytics_ClientName'] . "\r\n" . "Please Setup Cron Job." . "\r\n" . "\r\n" . "Cron Job direct link :" . base_url() . "media_stats/Front_media/api/" . $valuesdb['sender_crud_code']; mail($to, $subject, $message); Events::trigger('page_build', $this->template); $this->template->build('admin/settings'); } }
* - Makes an API request using the access token in the session var * * Make sure to request your API-key first at: * https://console.developers.google.com */ // From the APIs console $client_id = '<REPLACE ME>'; // From the APIs console $client_secret = '<REPLACE ME>'; // Url to your this page, must match the one in the APIs console $redirect_uri = '<REPLACE ME>'; // Analytics account id like, 'ga:xxxxxxx' $account_id = '<REPLACE ME>'; session_start(); include '../GoogleAnalyticsAPI.class.php'; $ga = new GoogleAnalyticsAPI(); $ga->auth->setClientId($client_id); $ga->auth->setClientSecret($client_secret); $ga->auth->setRedirectUri($redirect_uri); if (isset($_GET['force_oauth'])) { $_SESSION['oauth_access_token'] = null; } /* * Step 1: Check if we have an oAuth access token in our session * If we've got $_GET['code'], move to the next step */ if (!isset($_SESSION['oauth_access_token']) && !isset($_GET['code'])) { // Go get the url of the authentication page, redirect the client and go get that token! $url = $ga->auth->buildAuthUrl(); header("Location: " . $url); }
public function api($value = "") { $this->load->model('Creds'); $this->Creds->get_gacreds(); $valuesdb = $this->session->userdata('creds'); if ($value == $valuesdb['sender_crud_code']) { $ga = new GoogleAnalyticsAPI(); // need to get this from database Will be same and need to get from user. // use model creds to set values to userdata and feed to the following $this->load->model('Creds'); $this->Creds->get_gacreds(); $valuesdb = $this->session->userdata('creds'); $ga->auth->setClientId($valuesdb['ClientId']); $ga->auth->setClientSecret($valuesdb['Clientsecret']); $ga->auth->setRedirectUri(base_url() . "admin/media_stats/queryapi"); // from database Will be same and generated from API. $accessToken = $valuesdb['ga_accessToken']; $ga->setAccessToken($accessToken); // should be constant all the time. $tokenExpires = $valuesdb["ga_tokenExpires"]; // new in every cron job $tokenCreated = $valuesdb["ga_tokenCreated"]; // store those values back to database so that we can use it later on. // $ga->auth->refreshAccessToken ( ); if (time() - $tokenCreated >= $tokenExpires) { $auth = $ga->auth->refreshAccessToken($valuesdb["ga_refreshToken"]); $accessToken = $auth['access_token']; $refreshToken = $auth['refresh_token']; $tokenExpires = $auth['expires_in']; $entry_data = array('ga_accessToken' => $accessToken, 'ga_refreshToken' => $refreshToken, 'ga_tokenCreated' => time(), 'ga_tokenExpires' => $tokenExpires); $entry = $this->streams->entries->update_entry(1, $entry_data, 'social_media_creds', 'social_media'); $this->api($valuesdb["sender_crud_code"]); } $profiles = $ga->getProfiles(); $accounts = array(); foreach ($profiles['items'] as $item) { $id = "ga:{$item['id']}"; $name = $item['name']; $accounts[$id] = $name; } $ga->setAccountId($id); $defaults = array('start-date' => date('Y-m-d'), 'end-date' => date('Y-m-d')); $ga->setDefaultQueryParams($defaults); $visits = $ga->query(); $totalvisits = $visits['totalsForAllResults']["ga:visits"]; $referralTraffic = $ga->getReferralTraffic(); // /dump($referralTraffic); $googleplustraffic = $facebooktraffic = $googletraffic = $redittraffic = $twittertraffic = $bingtraffic = $pininteresttraffic = $linkedintraffic = 0; if (array_key_exists("rows", $referralTraffic)) { foreach ($referralTraffic["rows"] as $key => $values) { // dump($values); $pieces = explode(".", $values[0]); switch ($pieces[0]) { case "facebook": case "l": case "lm": $facebooktraffic = $facebooktraffic + intval($values[1]); break; case "google": case "draft": $googletraffic = $googletraffic + intval($values[1]); break; case "linkedin": $linkedintraffic = $linkedintraffic + intval($values[1]); break; case "reddit": $redittraffic = $redittraffic + intval($values[1]); break; case "bing": $bingtraffic = $bingtraffic + intval($values[1]); break; case "plus": $googleplustraffic = $googleplustraffic + intval($values[1]); break; case "pinterest": $pininteresttraffic = $pininteresttraffic + intval($values[1]); break; case "t": $twittertraffic = $twittertraffic + intval($values[1]); break; } } echo "<br>" . $facebooktraffic; echo "<br>" . $googletraffic; echo "<br> linkedintraffic" . $linkedintraffic; echo "<br> redittraffic" . $redittraffic; echo "<br> bingtraffic " . $bingtraffic; echo "<br>googleplustraffic " . $googleplustraffic; echo "<br>pininteresttraffic " . $pininteresttraffic; echo "<br> twittertraffic" . $twittertraffic; } if ($referralTraffic["http_code"] == 200) { $entry_data = array('raw_data' => json_encode($referralTraffic), 'total_visit' => $totalvisits, 'vbd_fb' => $facebooktraffic, 'vbd_google' => $googletraffic, 'vbd_reddit' => $redittraffic, 'vbd_Twitter' => $twittertraffic, 'vbd_bing' => $bingtraffic, 'vbd_pininterest' => $pininteresttraffic, 'vbd_linkedin' => $linkedintraffic); $params = array('stream' => 'google_analytics', 'namespace' => 'social_media', 'year' => intval(date('Y')), 'day' => intval(date('d')), 'month' => intval(date('m'))); $databasevalue = $this->streams->entries->get_entries($params); $id = intval($databasevalue["entries"][0]["id"]); if (sizeof($databasevalue['entries']) == 1) { $entry = $this->streams->entries->update_entry($id, $entry_data, 'google_analytics', 'social_media'); } else { $this->streams->entries->insert_entry($entry_data, 'google_analytics', 'social_media'); } } // var_dump($visitsByCountry); // var_dump($visitsByLanguages = $ga->getVisitsByLanguages(array('start-date' => '2013-01-01' )));//Overwrite this from the defaultQueryParams))); // $visitsByOs = $ga->getVisitsBySystemOs(array('max-results' => 100)); // var_dump($visitsByOs); } else { $this->load->model('Creds'); $this->Creds->get_gacreds(); $valuesdb = $this->session->userdata('creds'); $to = $valuesdb["created_by"]["email"]; echo "<h1>Authentication Failed. This attempt has been reported to Developer.</h1>"; $subject = 'Unsuccessful Attempt'; $message = "Hey Developer," . "\r\n" . "Cron job failed from IP Address :" . $this->get_ip() . "\r\n" . "Please check the cron code in server if you tried accessing it."; mail($to, $subject, $message); } }
public function getAnalytics($k = false) { require LIB_PATH . 'analytics/GAPI.php'; $cache = \StarterKit\Cache::getInstance(); $key = 'admin:analytics'; $data = $cache->get($key); if ($data === -1) { $ga = new \GoogleAnalyticsAPI('service'); $ga->auth->setClientId('444232255351-jp55p2lohhfu4oao0bpm0lggo00sotuc.apps.googleusercontent.com'); // From the APIs console $ga->auth->setEmail('*****@*****.**'); // From the APIs console $ga->auth->setPrivateKey(LIB_PATH . 'analytics/secret.p12'); $auth = $ga->auth->getAccessToken(); if ($auth['http_code'] != 200) { throw new \exception('Fail to connect'); } $token = $auth['access_token']; $expires = $auth['expires_in']; $created = time(); $ga->setAccessToken($token); $ga->setAccountId('ga:109638630'); //set some common dates $now = date('Y-m-d', strtotime(date('Y-m-d') . '-1 day')); // $dates represents the start date parameter for each timespan. no need to specify end date, we already have it in $now $dates = ['year' => date("Y-m-d", strtotime('first day of January ' . date('Y'))), 'month' => date('Y-m-01', strtotime('this month')), 'day' => date('Y-m-d', strtotime($now . ' -1 day'))]; $data = []; //device $data['devices'] = $ga->getVisitsBySystemOs(['max-results' => 100])['rows']; //visits by location $data['locations'] = $ga->query(['metrics' => 'ga:visits', 'dimensions' => 'ga:country', 'sort' => '-ga:visits', 'max-results' => 50, 'start-date' => $dates['year']])['rows']; //new vs returning $data['new_vs_returning'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:userType'])['rows']; //visits by city $data['visits_by_city'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:city', 'max-results' => 10])['rows']; //map view $data['map_view'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:city,ga:Latitude,ga:Longitude'])['rows']; //visitors by browser $data['browser'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:browser'])['rows']; //visitors by screensize $data['screen_sizes'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:screenResolution'])['rows']; //visits by service provider $data['isp'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:networkDomain', 'max-results' => 50])['rows']; //most popular pages $data['pages'] = $ga->query(['metrics' => 'ga:pageViews', 'dimensions' => 'ga:pagePath', 'max-results' => 10])['rows']; $data['hits_by_day'] = $ga->query(['metrics' => 'ga:pageviews,ga:visitors', 'dimensions' => 'ga:date', 'start-date' => $dates['month'], 'end-date' => $now])['rows']; $data['hits_by_country'] = $ga->query(['metrics' => 'ga:visitors', 'dimensions' => 'ga:country', 'start-date' => $dates['month'], 'end-date' => $now])['rows']; $data['hits_by_city'] = $ga->query(['metrics' => 'ga:visitors', 'dimensions' => 'ga:city', 'start-date' => $dates['month'], 'end-date' => $now])['rows']; $data['this_month'] = ['name' => date('M'), 'data' => $ga->query(['metrics' => 'ga:visits', 'dimensions' => 'ga:date', 'start-date' => $dates['month'], 'end-date' => $now])['rows']]; $data['this_year'] = ['name' => date('Y'), 'data' => $ga->query(['metrics' => 'ga:visits', 'dimensions' => 'ga:date', 'start-date' => $dates['year'], 'end-date' => $now])['rows']]; $data['months_in_year'] = $ga->query(['metrics' => 'ga:pageviews', 'dimensions' => 'ga:month', 'sort' => 'ga:month', 'start-date' => $dates['year'], 'end-date' => $now])['rows']; $data['social'] = $ga->query(['metrics' => 'ga:socialActivities', 'dimensions' => 'ga:week', 'sort' => 'ga:week', 'start-date' => '30daysAgo', 'end-date' => 'yesterday', 'max-results' => 25])['rows']; $data['referrals'] = $ga->query(['metrics' => 'ga:users', 'dimensions' => 'ga:referralPath', 'sort' => 'ga:referralPath', 'start-date' => '30daysAgo', 'end-date' => 'yesterday', 'max-results' => 20])['rows']; $data['device_type'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:deviceCategory', 'sort' => 'ga:deviceCategory', 'start-date' => '30daysAgo', 'end-date' => 'yesterday', 'max-results' => 20])['rows']; $data['mobile_devices'] = $ga->query(['metrics' => 'ga:sessions', 'dimensions' => 'ga:mobileDeviceInfo', 'sort' => 'ga:mobileDeviceInfo', 'start-date' => '30daysAgo', 'end-date' => 'yesterday', 'max-results' => 20])['rows']; try { $data['search_terms'] = $ga->query(['metrics' => 'ga:searchResultViews', 'dimensions' => 'ga:searchKeyword', 'sort' => 'ga:searchKeyword', 'start-date' => '30daysAgo', 'end-date' => 'yesterday', 'max-results' => 50])['rows']; } catch (\exception $e) { $data['search_terms'] = [['None Yet', 0]]; } $data['last_seven'] = $ga->query(['metrics' => 'ga:pageviews', 'dimensions' => 'ga:dayOfWeek', 'sort' => 'ga:dayOfWeek', 'start-date' => '8daysAgo', 'end-date' => 'yesterday', 'max-results' => 50])['rows']; if (!empty($data) && $data !== false && $data !== 0 && !is_null($data)) { $cache->set($key, $data, 60 * 60); //never set empty arrays to cache cache! } } if ($k) { if (isset($data[$k])) { return $data[$k]; } } return $data; }
function zero_hits_monitor() { update_option('zh_patrol_start', date('H:i:s')); $viewid = get_option('options_zh_viewid'); $ptype = get_option('options_zh_post_types'); $client_id = '660382727637-9a6j2f87ba86mross0rvi9jr37vb28h4.apps.googleusercontent.com'; $client_secret = 'BuRLl-SduOLag_6BQGB38WNi'; // PUBLIC // $client_id = '956426687308-20cs4la3m295f07f1njid6ttoeinvi92.apps.googleusercontent.com'; // $client_secret = 'yzrrxZgCPqIu2gaqqq-uzB4D'; $viewid = get_option('options_zh_viewid'); $redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'; $account_id = 'ga:' . $viewid; include_once 'GoogleAnalyticsAPI.class.php'; $ga = new GoogleAnalyticsAPI(); $ga->auth->setClientId($client_id); // From the APIs console $ga->auth->setClientSecret($client_secret); // From the APIs console $ga->auth->setRedirectUri($redirect_uri); // Url to your app, must match one in the APIs console // Get the Auth-Url $url = $ga->auth->buildAuthUrl(); ini_set('error_reporting', '0'); // disable all, for security $gatoken = get_option('ga_token'); $refreshToken = get_option('ga_refresh_token'); $tokenExpires = get_option('ga_token_expires'); $tokenCreated = get_option('ga_token_created'); if ($gatoken != '') { $ga->setAccessToken($gatoken); $ga->setAccountId($account_id); date_default_timezone_set('timezone_string'); $params = array('metrics' => 'ga:uniquePageviews', 'dimensions' => 'ga:pagePath,ga:month', 'sort' => '-ga:uniquePageviews'); $finalset = array(); foreach ($ptype as $pt) { $allposts = new WP_Query(array('post_type' => $pt, 'posts_per_page' => -1, 'post_status' => 'publish', 'date_query' => array(array('before' => array('year' => date('Y'), 'month' => date('n'), 'day' => 1), 'inclusive' => false)), 'meta_query' => array('relation' => 'OR', array('key' => 'zh_last_processed', 'value' => date('Ym01'), 'compare' => "<", 'type' => 'DATETIME'), array('key' => 'zh_last_processed', 'compare' => "NOT EXISTS")))); if ($allposts->have_posts()) { while ($allposts->have_posts()) { $allposts->the_post(); sleep(1); // allow for 10 calls per second limit $u = get_permalink(get_the_id()); $u = str_replace(site_url(), "", $u); $month_slot = 1; $last_processed = get_post_meta(get_the_id(), 'zh_last_processed', true); $months_to_do = 12; $date = date('Y-m-01 00:00:00'); $end_date = date('Y-m-d', strtotime('-1 day ' . $date)); $lastyear = date('Y'); $lastyear--; $sdate = $lastyear . "-" . date('m') . "-01"; $start_date = date('Y-m-01', strtotime($sdate)); $curmonth = date('m'); $filter = 'ga:pagePath=~' . $u . '$'; // Set the default params. For example the start/end dates and max-results $defaults = array('start-date' => $start_date, 'end-date' => $end_date, 'filters' => $filter); print_r($defaults); $ga->setDefaultQueryParams($defaults); $visits = $ga->query($params); if ($visits) { foreach ($visits as $r => $result) { if ($r == "rows") { foreach ($result as $res) { $input_month = $res[1]; $output_box = $curmonth - $input_month; if ($output_box <= 0) { $output_box = $output_box + 12; } $t = $finalset[get_the_id()][$output_box]; $finalset[get_the_id()][$output_box] = $t + $res[2]; } } else { $finalset[get_the_id()][$output_box] = 0; } } } else { $finalset[get_the_id()][$output_box] = 0; // CHECK FOR GA ERROR - IF SO, DON'T SAVE } // check for blank months for ($i = 1; $i <= 12; $i++) { if (!$finalset[get_the_id()][$i]) { $finalset[get_the_id()][$i] = 0; } } $end_date = date('Y-m-d', strtotime('-1 day' . $start_date)); $month_slot++; $finalset[get_the_id()][13] = $u; //tot up figures for the past 12 months $finalset[get_the_id()][0] = $finalset[get_the_id()][1] + $finalset[get_the_id()][2] + $finalset[get_the_id()][3] + $finalset[get_the_id()][4] + $finalset[get_the_id()][5] + $finalset[get_the_id()][6] + $finalset[get_the_id()][7] + $finalset[get_the_id()][8] + $finalset[get_the_id()][9] + $finalset[get_the_id()][10] + $finalset[get_the_id()][11] + $finalset[get_the_id()][12]; //tot up figures for the past 6 months $finalset[get_the_id()][14] = $finalset[get_the_id()][1] + $finalset[get_the_id()][2] + $finalset[get_the_id()][3] + $finalset[get_the_id()][4] + $finalset[get_the_id()][5] + $finalset[get_the_id()][6]; update_post_meta(get_the_id(), 'zh_last_processed', date('Ymd')); update_post_meta(get_the_id(), 'zh_month_1', $finalset[get_the_id()][1]); update_post_meta(get_the_id(), 'zh_month_2', $finalset[get_the_id()][2]); update_post_meta(get_the_id(), 'zh_month_3', $finalset[get_the_id()][3]); update_post_meta(get_the_id(), 'zh_month_4', $finalset[get_the_id()][4]); update_post_meta(get_the_id(), 'zh_month_5', $finalset[get_the_id()][5]); update_post_meta(get_the_id(), 'zh_month_6', $finalset[get_the_id()][6]); update_post_meta(get_the_id(), 'zh_month_7', $finalset[get_the_id()][7]); update_post_meta(get_the_id(), 'zh_month_8', $finalset[get_the_id()][8]); update_post_meta(get_the_id(), 'zh_month_9', $finalset[get_the_id()][9]); update_post_meta(get_the_id(), 'zh_month_10', $finalset[get_the_id()][10]); update_post_meta(get_the_id(), 'zh_month_11', $finalset[get_the_id()][11]); update_post_meta(get_the_id(), 'zh_month_12', $finalset[get_the_id()][12]); update_post_meta(get_the_id(), 'zh_total_1y', $finalset[get_the_id()][0]); update_post_meta(get_the_id(), 'zh_total_6m', $finalset[get_the_id()][14]); } } } update_option('zh_patrol_end', date('H:i')); } else { update_option('zh_patrol_end', 'an error. Google Analytics authentication needs updating!'); } }
<?php date_default_timezone_set('UTC'); require __DIR__ . '/../../cron_db_connection.php'; require 'GAPI.php'; //google analytics api class $ga = new GoogleAnalyticsAPI('service'); $ga->auth->setClientId('444232255351-jp55p2lohhfu4oao0bpm0lggo00sotuc.apps.googleusercontent.com'); // From the APIs console $ga->auth->setEmail('*****@*****.**'); // From the APIs console $ga->auth->setPrivateKey(__DIR__ . '/secret.p12'); $auth = $ga->auth->getAccessToken(); if ($auth['http_code'] != 200) { print_r($auth); throw new \exception('Fail to connect'); } $token = $auth['access_token']; $expires = $auth['expires_in']; $created = time(); $ga->setAccessToken($token); $ga->setAccountId('ga:109638630'); //set some common dates $now = date('Y-m-d', strtotime(date('Y-m-d') . '-1 day')); // $dates represents the start date parameter for each timespan. no need to specify end date, we already have it in $now $dates = ['year' => date("Y-m-d", strtotime('first day of January ' . date('Y'))), 'month' => date('Y-m-01', strtotime('this month')), 'day' => date('Y-m-d', strtotime($now . ' -1 day'))]; $data = []; //device $data['devices'] = $ga->getVisitsBySystemOs(['max-results' => 100]); //visits by location $data['locations'] = $ga->query(['metrics' => 'ga:visits', 'dimensions' => 'ga:country', 'sort' => '-ga:visits', 'max-results' => 50, 'start-date' => $dates['year']]);
/** * Cette fonction permet l'affichage des statistiques de visites * * @access public * @author koéZionCMS * @version 0.1 - 27/09/2013 by FI */ function backoffice_statistiques() { $aParams = $this->_check_datas_stats(); //Contrôle des dates if (isset($this->request->data['display']) && $this->request->data['display']) { $iSiteId = Session::read('Backoffice.Websites.current'); //Récupération de l'identifiant du site courant $sLoginGoogleAnalytics = Session::read('Backoffice.Websites.details.' . $iSiteId . '.ga_login'); //Login GA $sPasswdGoogleAnalytics = Session::read('Backoffice.Websites.details.' . $iSiteId . '.ga_password'); //Mot de passe GA $sIdGoogleAnalytics = Session::read('Backoffice.Websites.details.' . $iSiteId . '.ga_id'); //ID du profil du site dans GA //Pour afficher les données de Google Analytics nous devons en premier lieu vérifier un certain nombre de choses //- Que l'identifiant du site courant soit non vide //- Qu'il y ait bien un login Google Analytics de renseigné //- Qu'il y ait bien un mot de passe Google Analytics de renseigné //- Que pour le site courant l'identifiant du profil Google Analytics soit bien saisit if (!empty($iSiteId) && !empty($sLoginGoogleAnalytics) && !empty($sPasswdGoogleAnalytics) && !empty($sIdGoogleAnalytics)) { //require_once(LIBS.DS.'api_ga.php'); //Import de la librairie Google Analytics Configure::import(LIBS . DS . 'api_ga'); //Déclaration d'un objet de type GoogleAnalyticsAPI set_time_limit(0); $oGa = new GoogleAnalyticsAPI($sLoginGoogleAnalytics, $sPasswdGoogleAnalytics, $sIdGoogleAnalytics, $aParams['date_debut'], $aParams['date_fin']); $sToken = $oGa->getLoginToken(); // recupere le jeton d'acces pour controler que la connexion est bien faite if (!empty($sToken)) { ////////////////////////////////////////////////////////////////////////////// // RECUPERATION DES DONNEES STATISTIQUES EN FONCTION DES DATES INDIQUEES // $navigateurs = $oGa->getDimensionByMetric('pageviews', 'browser'); $this->set('navigateurs', $navigateurs); $countries = $oGa->getDimensionByMetric('pageviews', 'country'); $this->set('countries', $countries); $keywords = $oGa->getDimensionByMetric('pageviews', 'keyword'); $this->set('keywords', $keywords); $source = $oGa->getDimensionByMetric('pageviews', 'source'); $this->set('source', $source); $pagePath = $oGa->getDimensionByMetric('pageviews', 'pagePath'); $this->set('pagePath', $pagePath); $visits = $oGa->getMetric('visits'); $this->set('visits', $visits); $unique_visits = $oGa->getMetric('visitors'); $this->set('unique_visits', $unique_visits); $page_views = $oGa->getMetric('pageviews'); $this->set('page_views', $page_views); //$oGa->setSortByDimensions('month'); //!!! Obligatoire sinon les mois ne sont pas dans le bon ordre //$aVisitesA = $oGa->getDimensionByMetric('visitors', 'month'); //Nombre de visiteurs uniques absolus par mois $aDateDeb = explode('-', $aParams['date_debut']); $aDateFin = explode('-', $aParams['date_fin']); $sStartDateGaUsA = date('Y-m-d', mktime(0, 0, 0, $aDateDeb[1], $aDateDeb[2], $aDateDeb[0])); //1er janvier $sEndDateGaUsA = date('Y-m-d', mktime(0, 0, 0, $aDateFin[1], $aDateFin[2], $aDateFin[0])); //31 décembre $oGa->setDate($sStartDateGaUsA, $sEndDateGaUsA); //Set les date pour prendre une année complete : dissocié de la recherche //$oGa->setSortByDimensions('month'); //!!! Obligatoire sinon les mois ne sont pas dans le bon ordre $aGraphVisitesUniques = $oGa->getDimensionByMetric('visitors', 'month'); //Nombre de visiteurs uniques absolus par mois $aGraphVisites = $oGa->getDimensionByMetric('visits', 'month'); //Nombre de visiteurs uniques absolus par mois $aGraphPagesVues = $oGa->getDimensionByMetric('pageviews', 'month'); //Nombre de visiteurs uniques absolus par mois ////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// // RECUPERATION DES DONNEES STATISTIQUES POUR L'ANNEE EN COURS // $iNumYear = date('Y'); //En prevision si un jour on veut passer en parametre l'année. $sStartDateGaUs = date('Y-m-d', mktime(0, 0, 0, 1, 1, $iNumYear)); //1er janvier $sEndDateGaUs = date('Y-m-d', mktime(0, 0, 0, 12, 31, $iNumYear)); //31 décembre $oGa->setDate($sStartDateGaUs, $sEndDateGaUs); //Set les date pour prendre une année complete : dissocié de la recherche $oGa->setSortByDimensions('month'); //!!! Obligatoire sinon les mois ne sont pas dans le bon ordre $aVisites = $oGa->getDimensionByMetric('visitors', 'month'); //Nombre de visiteurs uniques absolus par mois $this->set('aGraphVisitesUniques', $aGraphVisitesUniques); $this->set('aGraphVisites', $aGraphVisites); $this->set('aGraphPagesVues', $aGraphPagesVues); $this->set('sGraphStart', $this->request->data['start']); $this->set('sGraphEnd', $this->request->data['end']); $this->set('iNumYear', $iNumYear); //////////////////////////////////////////////////////////////////// $this->set('iDisplay', 1); //Pour indiquer au front qu'il faut afficher les données } else { $this->set('sMessageErreurGa', 'Connexion impossible à Google Analytics'); } unset($oGa); } else { $this->set('sMessageErreurGa', 'Il y a un problème dans le paramétrages de vos données Google Analytics'); } } }