Google Analytics как получить токен доступа с помощью OAuth от сервера к серверу с помощью php

#oauth #google-analytics

#oauth #google-analytics

Вопрос:

Я пытаюсь создать панель мониторинга для данных Google Analytics, но я не знаю, как я могу объединить скрипты.

Я должен использовать аутентификацию от сервера к серверу следующим образом https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php но я не могу получить токен доступа для моей аутентификации на Javascript

 gapi.analytics.auth.authorize({
   serverAuth: {
      access_token: >>How to get an Access token from PHP<<
   }
});
  

Если я просто сделаю что-то вроде этого

 $KEY_FILE_LOCATION = __DIR__ . '/Service.json';
$client = new Google_Client();
$client->setApplicationName("Hello Analytics Reporting");
$client->setAuthConfig($KEY_FILE_LOCATION);
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
var_dump($client->getAccessToken())
  

Мой getAccessToken всегда равен нулю есть ли какой-либо другой способ получить токен доступа с подключением от сервера к серверу? Мне нужно найти метод, который не требует входа в систему через Javascript, поскольку все серверные пользователи из системы управления контентом должны иметь возможность видеть данные.

Большое вам спасибо. Я новичок в этом, было бы очень любезно, если бы вы могли объяснить, как это работает, а не просто отправлять ссылку

Редактировать: чтобы сказать это другими словами, вот весь мой код… почему это не работает, что не так? Пожалуйста, помогите мне

     <?php

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

$accessToken = initializeAnalytics();

function initializeAnalytics()
{
  $KEY_FILE_LOCATION = __DIR__ . '/Service.json';

  $client = new Google_Client();
  $client->setApplicationName("Hello Analytics Reporting");
  $client->setAuthConfig($KEY_FILE_LOCATION);
  $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
  $accessToken = $client->getAccessToken();
  return $accessToken;
}

?>

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


<div id="chart-1-container"></div>

<script>
    gapi.analytics.ready(function() {
        gapi.analytics.auth.authorize({
          serverAuth: {
            access_token: '<?php echo $accessToken ?>'
          }
        });

        var dataChart = new gapi.analytics.googleCharts.DataChart({
            query: {
                ids: "ga:128053216",
                metrics: 'ga:sessions',
                dimensions: 'ga:date',
                'start-date': '30daysAgo',
                'end-date': 'yesterday',
            },
            chart: {
                container: 'chart-1-container',
                type: 'LINE',
            }
        });
        dataChart.execute();
    });
</script>
  

Комментарии:

1. я думаю, вам нужно сделать один запрос, прежде чем он будет получать новый токен доступа. Попробуйте и попросите php сделать запрос к чему-либо.

2. не могли бы вы привести пример? Я немного потерялся.

Ответ №1:

Наконец-то нашел решение после нескольких дней попыток …. теперь оно работает с этим скриптом

     <?php

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

$accessToken = initializeAnalytics();

function initializeAnalytics()
{
  $KEY_FILE_LOCATION = __DIR__ . '/Service.json';

  $client = new Google_Client();
  $client->setApplicationName("Hello Analytics Reporting");
  $client->setAuthConfig($KEY_FILE_LOCATION);
  $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);

  $client->refreshTokenWithAssertion();
  $token = $client->getAccessToken();
  $accessToken = $token['access_token'];

  return $accessToken;
}

?>

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


<div id="chart-1-container"></div>

<script>
    gapi.analytics.ready(function() {
        gapi.analytics.auth.authorize({
          serverAuth: {
            access_token: '<?php echo $accessToken ?>'
          }
        });

        var dataChart = new gapi.analytics.googleCharts.DataChart({
            query: {
                ids: ">your analytics ID<",
                metrics: 'ga:sessions',
                dimensions: 'ga:date',
                'start-date': '30daysAgo',
                'end-date': 'yesterday',
            },
            chart: {
                container: 'chart-1-container',
                type: 'LINE',
            }
        });
        dataChart.execute();
    });
</script>