Grafico google Analytics en Dashboard administrativo

Asked

Viewed 368 times

0

Good afternoon, you guys. I’m breaking my head to pull some data from google Analytics and play on an administrative Dashboard so that the customer can track the accesses to your site.

I’ve been all over the Internet looking for information, but I couldn’t get it to work. I’m falling into the following mistake:

Error: redirect_uri_mismatch The redirect URI in the request, http://site.com.br/painel/oauth2callback.php, does not match the ones authorized for the Oauth client. To update the authorized redirect Uris, visit: https://console.developers.google.com/apis/credentials/oauthclient/135467487641321050540?project=8671114465475470

But the url is authorized in the credential I created for the project. I tried to access the URL that presents in the error, but falls on the credentials screen, but says that the Oauth client does not exist. I’ve recreated the credentials and the access account about 20x and nothing.

They follow codes I’m using:

index php.

<?php
// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';

// Create the client object and set the authorization configuration
// from the client_secretes.json you downloaded from the developer console.
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/vendor/Proj-5872691347db.json');
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);


// If the user has already authorized this app then get an access token
// else redirect to ask the user to authorize access to Google Analytics.
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
  // Set the access token on the client.
  $client->setAccessToken($_SESSION['access_token']);

  // Create an authorized analytics service object.
  $analytics = new Google_Service_Analytics($client);

  // Get the first view (profile) id for the authorized user.
  $profile = getFirstProfileId($analytics);

  // Get the results from the Core Reporting API and print the results.
  $results = getResults($analytics, $profile);
  printResults($results);
} else {
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/painel/oauth2callback.php';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}


function getFirstProfileId($analytics) {
  // Get the user's first view (profile) ID.

  // Get the list of accounts for the authorized user.
  $accounts = $analytics->management_accounts->listManagementAccounts();

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

    // Get the list of properties for the authorized user.
    $properties = $analytics->management_webproperties
        ->listManagementWebproperties($firstAccountId);

    if (count($properties->getItems()) > 0) {
      $items = $properties->getItems();
      $firstPropertyId = $items[0]->getId();

      // Get the list of views (profiles) for the authorized user.
      $profiles = $analytics->management_profiles
          ->listManagementProfiles($firstAccountId, $firstPropertyId);

      if (count($profiles->getItems()) > 0) {
        $items = $profiles->getItems();

        // Return the first view (profile) ID.
        return $items[0]->getId();

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

function getResults($analytics, $profileId) {
  // Calls the Core Reporting API and queries for the number of sessions
  // for the last seven days.
  return $analytics->data_ga->get(
      'ga:' . $profileId,
      '7daysAgo',
      'today',
      'ga:sessions');
}

function printResults($results) {
  // Parses the response from the Core Reporting API and prints
  // the profile name and total sessions.
  if (count($results->getRows()) > 0) {

    // Get the profile name.
    $profileName = $results->getProfileInfo()->getProfileName();

    // Get the entry for the first entry in the first row.
    $rows = $results->getRows();
    $sessions = $rows[0][0];

    // Print the results.
    print "<p>First view (profile) found: $profileName</p>";
    print "<p>Total sessions: $sessions</p>";
  } else {
    print "<p>No results found.</p>";
  }
}

?>

oauth2callback.php

<?php

// Load the Google API PHP Client Library.
require_once __DIR__ . '/vendor/autoload.php';

// Start a session to persist credentials.
session_start();

// Create the client object and set the authorization configuration
// from the client_secrets.json you downloaded from the Developers Console.
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/vendor/Proj-5872691347db.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/painel/oauth2callback.php');
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);

// Handle authorization flow from the server.
if (! isset($_GET['code'])) {
  $auth_url = $client->createAuthUrl();
  header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/painel';
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

?>

I’m counting on your help. Thanks in advance

1 answer

0


After much struggle and research I managed to solve, in case someone else needs I made the following command:

<?php

    // Carrega a biblioteca do Google API PHP.
    require_once __DIR__ . '/vendor/autoload.php';

      // Criar uma conta de serviço no Console do Google e baixar o arquivo JSON
      $KEY_FILE_LOCATION = __DIR__ . '/vendor/Aqui-Vem-o-Arquivo.json';

      // Criando e configurando um novo client object.
      $client = new Google_Client();
      $client->setApplicationName("Hello Analytics Reporting");
      $client->setAuthConfig($KEY_FILE_LOCATION);
      $client->setAccessType('offline');
      $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
      $client->refreshTokenWithAssertion();
      $analytics = new Google_Service_Analytics($client);
      $token = $client->getAccessToken();
      $accessToken = $token['access_token'];


    ?>

Script that generates graphics

<script>
        (function(w,d,s,g,js,fs){
          g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}};
          js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
          js.src='https://apis.google.com/js/platform.js';
          fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');};
        }(window,document,'script'));
        </script>
<script>

    gapi.analytics.ready(function() {

      /**
       * Obtem token de acesso do lado do servidor.
       */
      gapi.analytics.auth.authorize({
        'serverAuth': {
          'access_token': '<?php echo $accessToken?>'
        }
      });


      /**
       * Cria gráfico com visitas (sessions e usuários)
      **/
      var dataChart1 = new gapi.analytics.googleCharts.DataChart({
        query: {
          'ids': 'ga:3215454654', // <-- Replace with the ids value for your view.
          'start-date': '30daysAgo',
          'end-date': 'yesterday',
          'metrics': 'ga:sessions,ga:users',
          'dimensions': 'ga:date'
        },
        chart: {
          'container': 'chart-1-container',
          'type': 'LINE',
          'options': {
            'width': '100%'
          }
        }
      });
      dataChart1.execute();


      /**
       * Cria gráfico com páginas mais acessadas
      **/
      var dataChart2 = new gapi.analytics.googleCharts.DataChart({
        query: {
          'ids': 'ga:3215454654', //  <-- Trocar aqui pelo ID da vista da propriedade.
          'start-date': '30daysAgo',
          'end-date': 'yesterday',
          'metrics': 'ga:pageviews',
          'dimensions': 'ga:pagePathLevel1',
          'sort': '-ga:pageviews',
          'filters': 'ga:pagePathLevel1!=/',
          'max-results': 7
        },
        chart: {
          'container': 'chart-2-container',
          'type': 'PIE',
          'options': {
            'width': '100%',
            'pieHole': 4/9,
          }
        }
      });
      dataChart2.execute();


      /**
       * Cria gráfico com cidades que mais visitaram
      **/

      var dataChart3 = new gapi.analytics.googleCharts.DataChart({
        query: {
          'ids': 'ga:3215454654', // <-- Trocar aqui pelo ID da vista da propriedade.
          'metrics': 'ga:sessions',
          'dimensions': 'ga:city',
          'start-date': '30daysAgo',
          'end-date': 'yesterday',
          'max-results': 6,
          'sort': '-ga:sessions'


        },
        chart: {
          'container': 'chart-3-container',
          'type': 'PIE',
          'options': {
            'width': '100%',
            'pieHole': 4/9,
          }
        }
      });
      dataChart3.execute();

    });
    </script>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.