Доступ к данным Google Analytics из Symfony

В этой статье я покажу пример базового использования клиентских библиотек API в Symfony пректе: создадим команду Symfony, которая будет выводить количество просмотров и визитов страницы за определенный интервал времени.

Существует несколько PHP библиотек, позволяющих получить данные из Google Analytics:

  • GAPI: Google Analytics PHP интерфейс
  • Google API client library: позволяет сразу работать с несколькими продуктами Google, например Google Analytics, Google+ или Google Drive

Обе эти библиотеки используют OAuth2 для авторизации (требование Google). Таким образом предоставляется безопасное соединение и доступ к данным Google Analytics.

В обоих случаях вам понадобится особенный аккаунт от Google, затем следует загрузить ключевой файл (в формате PKCS12), который даст вам доступ к данным.

Создание сервисного аккаунта

  • Просто следуйте инструкциям в документации Google, а затем скачайте ключевой файл (.p12).
  • На странице административного интерфейса Google Analytics (раздел “Управление пользователями”), выдайте вашему сервисному аккаунту (xxx@developer.gserviceaccount.com) права на “Чтение и Анализ” того аккаунта Google Analytics, чьи данные вы хотите получить.

Создание команды Symfony

Клиентская библиотека Google API распространяется средствами Composer на packagist.org, так что для её установки вам достаточно добавить следующую строку в composer.json:

"require": {
   ...
   "google/apiclient": "1.1.*"
}

Затем скачиваем библиотеку

$ composer update google/apiclient

Скопируйте .p12 файл в каталог app/config. Добавьте следующие параметры в файл app/config/config.yml:

parameters:  
   # Email associated to the service account
   ga_service_account: 'xxx-xxx@developer.gserviceaccount.com'
   # Path to the p12 key file associated to the service account
   ga_key: '%kernel.root_dir%/config/Analytics-API-Project-xxx.p12'
   # Id of your Google Analytics profile
   ga_profile_id: xxx

Создайте саму команду:

<?php

namespace App\DemoBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;  
use Symfony\Component\Console\Input\InputInterface;  
use Symfony\Component\Console\Input\InputArgument;  
use Symfony\Component\Console\Output\OutputInterface;

class PrintGoogleAnalyticsDataCommand extends ContainerAwareCommand 
{  
   protected function configure() 
   {
       $this->setName('demo:print-google-analytics-data')->addArgument('startDate', InputArgument::REQUIRED, 'Start date (format: YYYY-MM-DD)')->addArgument ('endDate', InputArgument::REQUIRED, 'End date (format: YYYY-MM-DD)');
   }

   protected function execute(InputInterface $input, OutputInterface $output) 
   {
       // Retrieves needed parameters
       $container = $this->getContainer();
       $serviceAccountName = $container->getParameter('ga_service_account');
       $keyFile = $container->getParameter('ga_key');
       $key = @file_get_contents($keyFile);

       if (FALSE === $key) {
           $output->writeln(sprintf('<error>Missing key file: %s</error>', $keyFile));
           return;
       }

       $profileId = $container->getParameter('ga_profile_id');

       // Чтение аргументов
       $startDate = $input->getArgument('startDate');
       $endDate = $input->getArgument('endDate');
       // To be done here: check dates format

       // Инициализация объекта google
       $client = new \Google_Client();
       $client->setApplicationName('teline.fr');
       $credentials = new \Google_Auth_AssertionCredentials($serviceAccountName, array(
               'https://www.googleapis.com/auth/analytics.readonly' 
       ), $key);

       if ($client->getAuth()->isAccessTokenExpired()) {
           $client->getAuth()->refreshTokenWithAssertion($credentials);
       }

       // Вызов
       $googleService = new \Google_Service_Analytics($client);
       $data = $googleService->data_ga->get('ga:' . $profileId, $startDate, $endDate, 'ga:pageviews,ga:visits', array (
               'dimensions' => 'ga:source',
               'max-results' => '1' 
       ) );

       // Вывод результатов
       $results = $data->totalsForAllResults;
       $output->writeln(sprintf('Google Analytics Stats from %s to %s:', $startDate, $endDate));
       $output->writeln(sprintf(' - page views: %d', $results ['ga:pageviews']));
       $output->writeln(sprintf(' - visits: %d', $results ['ga:visits']));
   }
}

Тестирование команды

$ ./app/console demo:print-google-analytics-data 2014-01-01 2014-12-31
Google Analytics Stats from 2014-01-01 to 2014-12-31:  
- page views: 159248
- visits: 43232

Комментарии

0
Войти
Комментариев нет.
Войдите чтобы оставлять комментарии.